Changeset 4227 for palm/trunk/SOURCE


Ignore:
Timestamp:
Sep 10, 2019 6:04:34 PM (5 years ago)
Author:
gronemeier
Message:

implement new palm_date_time_mod; replaced namelist parameters time_utc_init and day_of_year_init by origin_date_time

Location:
palm/trunk/SOURCE
Files:
1 added
1 deleted
20 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/SOURCE/Makefile

    r4182 r4227  
    2525# -----------------
    2626# $Id$
     27# Add palm_date_time_mod, remove date_and_time_mod
     28#
     29# 4223 2019-09-10 09:20:47Z gronemeier
    2730# Corrected "Former revisions" section
    2831#
     
    138141        data_output_spectra.f90 \
    139142        data_output_tseries.f90 \
    140         date_and_time_mod.f90 \
    141143        diagnostic_output_quantities_mod.f90 \
    142144        diffusion_s.f90 \
     
    187189        outflow_turbulence.f90 \
    188190        palm.f90 \
     191        palm_date_time_mod.f90 \
    189192        parin.f90 \
    190193        plant_canopy_model_mod.f90 \
     
    324327biometeorology_mod.o: \
    325328        basic_constants_and_equations_mod.o \
    326         date_and_time_mod.o \
    327         modules.o \
    328         mod_kinds.o \
    329         netcdf_data_input_mod.o \
     329        modules.o \
     330        mod_kinds.o \
     331        netcdf_data_input_mod.o \
     332        palm_date_time_mod.o \
    330333        radiation_model_mod.o
    331334boundary_conds.o: \
     
    381384        chem_gasphase_mod.o \
    382385        chem_modules.o \
    383         date_and_time_mod.o \
    384         mod_kinds.o \
    385         modules.o \
    386         netcdf_data_input_mod.o \
     386        mod_kinds.o \
     387        modules.o \
     388        netcdf_data_input_mod.o \
     389        palm_date_time_mod.o \
    387390        surface_mod.o
    388391chemistry_model_mod.o: \
     
    392395        chem_modules.o \
    393396        chem_photolysis_mod.o \
    394         date_and_time_mod.o \
    395397        diffusion_s.o \
    396398        mod_kinds.o \
    397399        modules.o \
    398400        netcdf_data_input_mod.o \
     401        palm_date_time_mod.o \
    399402        radiation_model_mod.o \
    400403        surface_mod.o
     
    411414        mod_kinds.o \
    412415        modules.o \
     416        palm_date_time_mod.o \
    413417        radiation_model_mod.o
    414418close_file.o: \
     
    503507        radiation_model_mod.o \
    504508        urban_surface_mod.o
    505 date_and_time_mod.o: \
    506         mod_kinds.o \
    507         modules.o
    508509diagnostic_output_quantities_mod.o: \
    509510        mod_kinds.o \
     
    578579        bulk_cloud_model_mod.o \
    579580        cpulog_mod.o \
    580         date_and_time_mod.o \
    581581        model_1d_mod.o \
    582582        module_interface.o \
     
    585585        netcdf_interface_mod.o \
    586586        ocean_mod.o \
     587        palm_date_time_mod.o \
    587588        plant_canopy_model_mod.o \
    588589        pmc_handle_communicator_mod.o \
     
    592593indoor_model_mod.o: \
    593594        cpulog_mod.o \
    594         date_and_time_mod.o \
    595         mod_kinds.o \
    596         modules.o \
    597         netcdf_data_input_mod.o \
     595        mod_kinds.o \
     596        modules.o \
     597        netcdf_data_input_mod.o \
     598        palm_date_time_mod.o \
    598599        surface_mod.o \
    599600        urban_surface_mod.o
     
    621622        random_generator_parallel_mod.o \
    622623        read_restart_data_mod.o \
     624        palm_date_time_mod.o \
    623625        surface_layer_fluxes_mod.o \
    624626        surface_mod.o \
     
    779781        netcdf_data_input_mod.o \
    780782        ocean_mod.o \
     783        palm_date_time_mod.o \
    781784        radiation_model_mod.o \
    782785        salsa_mod.o \
     
    810813        chem_photolysis_mod.o \
    811814        cpulog_mod.o \
    812         date_and_time_mod.o \
    813815        diagnostic_output_quantities_mod.o \
    814816        land_surface_model_mod.o \
     
    825827        time_to_string.o \
    826828        write_restart_data_mod.o
     829palm_date_time_mod.o: \
     830        mod_kinds.o \
     831        modules.o
    827832parin.o: \
    828833        chem_modules.o \
    829834        cpulog_mod.o \
    830         date_and_time_mod.o \
    831835        model_1d_mod.o \
    832836        mod_kinds.o \
     
    952956        bulk_cloud_model_mod.o \
    953957        calc_mean_profile.o \
    954         date_and_time_mod.o \
    955958        mod_particle_attributes.o \
    956959        modules.o \
    957960        netcdf_data_input_mod.o \
     961        palm_date_time_mod.o \
    958962        plant_canopy_model_mod.o \
    959963        surface_mod.o
     
    970974        chem_modules.o \
    971975        cpulog_mod.o \
    972         date_and_time_mod.o \
    973976        diagnostic_output_quantities_mod.o \
    974977        mod_kinds.o \
     
    977980        modules.o \
    978981        netcdf_interface_mod.o \
     982        palm_date_time_mod.o \
    979983        radiation_model_mod.o \
    980984        random_function_mod.o\
     
    9981002        diffusion_s.o \
    9991003        netcdf_data_input_mod.o \
     1004        palm_date_time_mod.o \
    10001005        plant_canopy_model_mod.o \
    10011006        surface_mod.o \
     
    10861091        nesting_offl_mod.o \
    10871092        ocean_mod.o \
     1093        palm_date_time_mod.o \
    10881094        pmc_interface_mod.o \
    10891095        prognostic_equations.o \
     
    11051111        basic_constants_and_equations_mod.o \
    11061112        cpulog_mod.o \
    1107         date_and_time_mod.o \
    11081113        land_surface_model_mod.o \
    11091114        mod_kinds.o \
    11101115        modules.o \
     1116        palm_date_time_mod.o \
    11111117        pmc_interface_mod.o \
    11121118        radiation_model_mod.o \
     
    11521158urban_surface_mod.o: \
    11531159        basic_constants_and_equations_mod.o \
    1154         date_and_time_mod.o \
    1155         mod_kinds.o \
    1156         modules.o \
    1157         netcdf_data_input_mod.o \
     1160        mod_kinds.o \
     1161        modules.o \
     1162        netcdf_data_input_mod.o \
     1163        palm_date_time_mod.o \
    11581164        radiation_model_mod.o \
    11591165        surface_mod.o
     
    12531259        mod_kinds.o
    12541260write_restart_data_mod.o: \
    1255         date_and_time_mod.o \
    12561261        mod_kinds.o \
    12571262        model_1d_mod.o \
     
    12591264        modules.o \
    12601265        netcdf_interface_mod.o \
     1266        palm_date_time_mod.o \
    12611267        radiation_model_mod.o \
    12621268        random_function_mod.o \
  • palm/trunk/SOURCE/biometeorology_mod.f90

    r4182 r4227  
    2727! -----------------
    2828! $Id$
     29! implement new palm_date_time_mod
     30!
     31! 4223 2019-09-10 09:20:47Z gronemeier
    2932! Corrected "Former revisions" section
    3033!
     
    140143               surface_pressure
    141144
    142     USE date_and_time_mod,                                                     &
    143         ONLY:  calc_date_and_time, day_of_year, time_utc
    144 
    145145    USE grid_variables,                                                        &
    146146        ONLY:  ddx, dx, ddy, dy
     
    155155        ONLY:  netcdf_data_input_uvem, uvem_projarea_f, uvem_radiance_f,       &
    156156               uvem_irradiance_f, uvem_integration_f, building_obstruction_f
     157
     158    USE palm_date_time_mod,                                                    &
     159        ONLY:  get_date_time
    157160!
    158161!-- Import radiation model to obtain input for mean radiant temperature
     
    42264229!-- UVEM specific subroutines
    42274230
    4228 !---------------------------------------------------------------------------------------------------------------------!
     4231!--------------------------------------------------------------------------------------------------!
    42294232! Description:
    42304233! ------------
    42314234!> Module-specific routine for new module
    4232 !---------------------------------------------------------------------------------------------------------------------!
     4235!--------------------------------------------------------------------------------------------------!
    42334236 SUBROUTINE uvem_solar_position
    4234    
    4235     USE date_and_time_mod,                                                                                            &
    4236        ONLY:  calc_date_and_time, day_of_year, time_utc
    4237    
    4238     USE control_parameters,                                                                                           &
    4239        ONLY:  latitude, longitude   
     4237
     4238    USE control_parameters,                                                                        &
     4239       ONLY:  latitude, longitude, time_since_reference_point
    42404240
    42414241    IMPLICIT NONE
    4242    
    4243    
    4244     REAL(wp) ::  alpha       = 0.0_wp   !< solar azimuth angle in radiant   
    4245     REAL(wp) ::  doy_r       = 0.0_wp   !< real format of day_of_year           
    4246     REAL(wp) ::  declination = 0.0_wp   !< declination
    4247     REAL(wp) ::  dtor        = 0.0_wp   !< factor to convert degree to radiant
    4248     REAL(wp) ::  js          = 0.0_wp   !< parameter for solar position calculation
    4249     REAL(wp) ::  lat         = 52.39_wp !< latitude
    4250     REAL(wp) ::  lon         = 9.7_wp   !< longitude       
    4251     REAL(wp) ::  thetar      = 0.0_wp   !< angle for solar zenith angle calculation
    4252     REAL(wp) ::  thetasr     = 0.0_wp   !< angle for solar azimuth angle calculation   
    4253     REAL(wp) ::  zgl         = 0.0_wp   !< calculated exposure by direct beam   
    4254     REAL(wp) ::  woz         = 0.0_wp   !< calculated exposure by diffuse radiation
    4255     REAL(wp) ::  wsp         = 0.0_wp   !< calculated exposure by direct beam   
    4256    
    4257 
    4258     CALL calc_date_and_time
    4259     doy_r = real(day_of_year)   
     4242
     4243    INTEGER(iwp) ::  day_of_year = 0       !< day of year
     4244
     4245    REAL(wp) ::  alpha         = 0.0_wp    !< solar azimuth angle in radiant   
     4246    REAL(wp) ::  declination   = 0.0_wp    !< declination
     4247    REAL(wp) ::  dtor          = 0.0_wp    !< factor to convert degree to radiant
     4248    REAL(wp) ::  js            = 0.0_wp    !< parameter for solar position calculation
     4249    REAL(wp) ::  lat           = 52.39_wp  !< latitude
     4250    REAL(wp) ::  lon           = 9.7_wp    !< longitude
     4251    REAL(wp) ::  second_of_day = 0.0_wp    !< current second of the day
     4252    REAL(wp) ::  thetar        = 0.0_wp    !< angle for solar zenith angle calculation
     4253    REAL(wp) ::  thetasr       = 0.0_wp    !< angle for solar azimuth angle calculation   
     4254    REAL(wp) ::  zgl           = 0.0_wp    !< calculated exposure by direct beam   
     4255    REAL(wp) ::  woz           = 0.0_wp    !< calculated exposure by diffuse radiation
     4256    REAL(wp) ::  wsp           = 0.0_wp    !< calculated exposure by direct beam   
     4257
     4258
     4259    CALL get_date_time( time_since_reference_point, &
     4260                        day_of_year = day_of_year, second_of_day = second_of_day )
    42604261    dtor = pi / 180.0_wp
    42614262    lat = latitude
     
    42634264!
    42644265!-- calculation of js, necessary for calculation of equation of time (zgl) :
    4265     js=  72.0_wp * ( doy_r + ( time_utc / 86400.0_wp ) ) / 73.0_wp
     4266    js=  72.0_wp * ( REAL( day_of_year, KIND=wp ) + ( second_of_day / 86400.0_wp ) ) / 73.0_wp
    42664267!
    42674268!-- calculation of equation of time (zgl):
     
    42704271!
    42714272!-- calculation of apparent solar time woz:
    4272     woz = ( ( time_utc / 3600.0_wp ) - ( 4.0_wp * ( 15.0_wp - lon ) ) / 60.0_wp ) + ( zgl / 60.0_wp )
     4273    woz = ( ( second_of_day / 3600.0_wp ) - ( 4.0_wp * ( 15.0_wp - lon ) ) / 60.0_wp ) + ( zgl / 60.0_wp )
    42734274!
    42744275!-- calculation of hour angle (wsp):
  • palm/trunk/SOURCE/chem_emissions_mod.f90

    r4218 r4227  
    2727! -----------------
    2828! $Id$
     29! implement new palm_date_time_mod
     30!
     31! 4223 2019-09-10 09:20:47Z gronemeier
    2932! Unused routine chem_emissions_check_parameters commented out due to uninitialized content
    3033!
     
    118121        ONLY: chem_emis_att_type, chem_emis_val_type
    119122
    120     USE date_and_time_mod,                                                   &
    121         ONLY: day_of_month, hour_of_day,                                     &
    122              index_mm, index_dd, index_hh,                                   &
    123              month_of_year, hour_of_day,                                     &
    124              time_default_indices, time_preprocessed_indices
    125    
    126123    USE chem_gasphase_mod,                                                   &
    127124        ONLY: nvar, spc_names
     
    905902! Description:
    906903! ------------
    907 !> Routine for Update of Emission values at each timestep
     904!> Routine for Update of Emission values at each timestep.
     905!>
     906!> @todo Clarify the correct usage of index_dd, index_hh and index_mm. Consider
     907!>       renaming of these variables.
     908!> @todo Clarify time used in emis_lod=2 mode. ATM, the used time seems strange.
    908909!-------------------------------------------------------------------------------!
    909910
     
    919920       ONLY: hyp, pt
    920921
     922    USE control_parameters, &
     923        ONLY: time_since_reference_point
     924
     925    USE palm_date_time_mod, &
     926        ONLY: days_per_week, get_date_time, hours_per_day, months_per_year, seconds_per_day
    921927   
    922928 IMPLICIT NONE
     
    940946    INTEGER(iwp) ::  m                                                          !< running index for horizontal surfaces
    941947
     948    INTEGER(iwp) ::  day_of_month                                               !< day of the month
     949    INTEGER(iwp) ::  day_of_week                                                !< day of the week
     950    INTEGER(iwp) ::  day_of_year                                                !< day of the year
     951    INTEGER(iwp) ::  days_since_reference_point                                 !< days since reference point
     952    INTEGER(iwp) ::  hour_of_day                                                !< hour of the day
     953    INTEGER(iwp) ::  month_of_year                                              !< month of the year
     954    INTEGER(iwp) ::  index_dd                                                   !< index day
     955    INTEGER(iwp) ::  index_hh                                                   !< index hour
     956    INTEGER(iwp) ::  index_mm                                                   !< index month
     957
     958    REAL(wp) ::  time_utc_init                                                  !< second of day of initial date
     959
    942960    !
    943961    !-- CONVERSION FACTORS: TIME 
    944962    REAL(wp), PARAMETER ::  hour_per_year =  8760.0_wp  !< number of hours in a year of 365 days 
    945     REAL(wp), PARAMETER ::  hour_per_day  =    24.0_wp  !< number of hours in a day
    946963    REAL(wp), PARAMETER ::  s_per_hour    =  3600.0_wp  !< number of sec per hour (s)/(hour)   
    947964    REAL(wp), PARAMETER ::  s_per_day     = 86400.0_wp  !< number of sec per day (s)/(day) 
     
    10731090!-- Update time indices
    10741091
    1075           CALL time_preprocessed_indices( index_hh )
    1076 
     1092          CALL get_date_time( 0.0_wp, second_of_day=time_utc_init )
     1093          CALL get_date_time( time_since_reference_point, hour=hour_of_day )
     1094
     1095          days_since_reference_point = INT( FLOOR( ( time_utc_init + time_since_reference_point ) &
     1096                                                   / seconds_per_day ) )
     1097
     1098          index_hh = days_since_reference_point * hours_per_day + hour_of_day
    10771099
    10781100!
     
    11021124!-- Update time indices
    11031125
    1104              CALL time_default_indices( month_of_year, day_of_month, hour_of_day, index_hh )
     1126             CALL get_date_time( time_since_reference_point, &
     1127                                 day_of_year=day_of_year, hour=hour_of_day )
     1128             index_hh = ( day_of_year - 1_iwp ) * hour_of_day
    11051129
    11061130!
     
    11321156!
    11331157!-- Update time indices
    1134              CALL time_default_indices( daytype_mdh, month_of_year, day_of_month,  &
    1135                   hour_of_day, index_mm, index_dd,index_hh )
    1136 
     1158             CALL get_date_time( time_since_reference_point, &
     1159                                 month=month_of_year,        &
     1160                                 day=day_of_month,           &
     1161                                 hour=hour_of_day,           &
     1162                                 day_of_week=day_of_week     )
     1163             index_mm = month_of_year
     1164             index_dd = months_per_year + day_of_week
     1165             SELECT CASE(TRIM(daytype_mdh))
     1166
     1167                CASE ("workday")
     1168                   index_hh = months_per_year + days_per_week + hour_of_day
     1169
     1170                CASE ("weekend")
     1171                   index_hh = months_per_year + days_per_week + hours_per_day + hour_of_day
     1172
     1173                CASE ("holiday")
     1174                   index_hh = months_per_year + days_per_week + 2*hours_per_day + hour_of_day
     1175
     1176             END SELECT
    11371177!
    11381178!-- Check if the index is less or equal to the temporal dimension of MDH emission files
     
    11891229
    11901230!
    1191 !-- Get time-factor for specific hour
     1231!--       Get time-factor for specific hour
     1232          CALL get_date_time( time_since_reference_point, hour=hour_of_day )
    11921233
    11931234          index_hh = hour_of_day
     
    11961237       ENDIF  ! emiss_lod
    11971238
    1198        
     1239
    11991240!
    12001241!--  Emission distribution calculation
     
    12571298                                                 time_factor(icat) *           &
    12581299                                                 emt_att%nox_comp(icat,1) *    &
    1259                                                  conversion_factor * hour_per_day
     1300                                                 conversion_factor * hours_per_day
    12601301
    12611302                   emis_distribution(1,nys:nyn,nxl:nxr,ispec) =                &
     
    12701311                                                 time_factor(icat) *           &
    12711312                                                 emt_att%nox_comp(icat,2) *    &
    1272                                                  conversion_factor * hour_per_day
     1313                                                 conversion_factor * hours_per_day
    12731314
    12741315                   emis_distribution(1,nys:nyn,nxl:nxr,ispec) =                &
     
    12831324                                                 time_factor(icat) *           &
    12841325                                                 emt_att%sox_comp(icat,1) *    &
    1285                                                  conversion_factor * hour_per_day
     1326                                                 conversion_factor * hours_per_day
    12861327
    12871328                   emis_distribution(1,nys:nyn,nxl:nxr,ispec) =                &
     
    12981339                                                 time_factor(icat) *           &
    12991340                                                 emt_att%sox_comp(icat,2) *    &
    1300                                                  conversion_factor * hour_per_day
     1341                                                 conversion_factor * hours_per_day
    13011342
    13021343                   emis_distribution(1,nys:nyn,nxl:nxr,ispec) =                &
     
    13151356                                                    time_factor(icat) *                  &
    13161357                                                    emt_att%pm_comp(icat,i_pm_comp,1) *  &
    1317                                                     conversion_factor * hour_per_day
     1358                                                    conversion_factor * hours_per_day
    13181359
    13191360                      emis_distribution(1,nys:nyn,nxl:nxr,ispec) =                       &
     
    13331374                                                    time_factor(icat) *                  &
    13341375                                                    emt_att%pm_comp(icat,i_pm_comp,2) *  &
    1335                                                     conversion_factor * hour_per_day
     1376                                                    conversion_factor * hours_per_day
    13361377
    13371378                      emis_distribution(1,nys:nyn,nxl:nxr,ispec) =                       &
     
    13511392                                                    time_factor(icat)     *              &
    13521393                                                    emt_att%pm_comp(icat,i_pm_comp,3) *  &
    1353                                                     conversion_factor * hour_per_day
     1394                                                    conversion_factor * hours_per_day
    13541395
    13551396                      emis_distribution(1,nys:nyn,nxl:nxr,ispec) =                       &
     
    13721413                                                       time_factor(icat) *               &
    13731414                                                       emt_att%voc_comp(icat,match_spec_voc_input(ivoc)) *   &
    1374                                                        conversion_factor * hour_per_day
     1415                                                       conversion_factor * hours_per_day
    13751416
    13761417                         emis_distribution(1,nys:nyn,nxl:nxr,ispec) =                    &
     
    13891430                   delta_emis(nys:nyn,nxl:nxr) = emis(nys:nyn,nxl:nxr) *                 &
    13901431                                                 time_factor(icat) *                     &
    1391                                                  conversion_factor * hour_per_day
     1432                                                 conversion_factor * hours_per_day
    13921433 
    13931434                   emis_distribution(1,nys:nyn,nxl:nxr,ispec) =                          &
  • palm/trunk/SOURCE/chem_photolysis_mod.f90

    r4182 r4227  
    2626! -----------------
    2727! $Id$
     28! Change call to calc_zenith
     29!
     30! 4223 2019-09-10 09:20:47Z gronemeier
    2831! Corrected "Former revisions" section
    2932!
     
    227230 SUBROUTINE photolysis_simple
    228231
     232    USE palm_date_time_mod,                                                    &
     233        ONLY:  get_date_time
     234
    229235    USE radiation_model_mod,                                                   &
    230236        ONLY:  calc_zenith, cos_zenith
     
    232238    IMPLICIT NONE
    233239
    234     INTEGER(iwp) :: iphot,iav !< loop indix for photolysis reaction
    235     REAL(wp)     :: coszi     !< 1./cosine of zenith angle
     240    INTEGER(iwp) :: day_of_year  !< day of the year
     241    INTEGER(iwp) :: iav          !< loop indix for photolysis reaction
     242    INTEGER(iwp) :: iphot        !< loop indix for photolysis reaction
     243
     244    REAL(wp)     :: coszi          !< 1./cosine of zenith angle
     245    REAL(wp)     :: second_of_day  !< second of the day
    236246
    237247    DO  iphot = 1, nphot
     
    239249    ENDDO
    240250
    241     CALL calc_zenith
     251    CALL get_date_time( time_since_reference_point, &
     252                        day_of_year=day_of_year, second_of_day=second_of_day )
     253    CALL calc_zenith( day_of_year, second_of_day )
    242254
    243255    IF ( cos_zenith > 0.0_wp ) THEN
  • palm/trunk/SOURCE/chemistry_model_mod.f90

    r4182 r4227  
    2727! -----------------
    2828! $Id$
     29! implement new palm_date_time_mod
     30!
     31! 4182 2019-08-22 15:20:23Z scharf
    2932! Corrected "Former revisions" section
    3033!
     
    29962999
    29973000    USE control_parameters,                                                 &   
    2998          ONLY:  dt_3d, intermediate_timestep_count, latitude
     3001         ONLY:  dt_3d, intermediate_timestep_count, latitude,               &
     3002                time_since_reference_point
    29993003
    30003004    USE arrays_3d,                                                          &
    30013005         ONLY:  dzw, rho_air_zw
    30023006
    3003     USE date_and_time_mod,                                                  &
    3004          ONLY:  day_of_year
     3007    USE palm_date_time_mod,                                                 &
     3008         ONLY:  get_date_time
    30053009
    30063010    USE surface_mod,                                                        &
     
    30123016
    30133017
     3018    INTEGER(iwp) ::  day_of_year                   !< current day of the year
    30143019    INTEGER(iwp), INTENT(IN) ::  i
    30153020    INTEGER(iwp), INTENT(IN) ::  j
     
    32863291         xm_O * 3 /)                                !< o3_biascorr
    32873292!
     3293!-- Get current day of the year
     3294    CALL get_date_time( time_since_reference_point, day_of_year = day_of_year )
     3295!
    32883296!-- Initialize surface element m
    32893297    m = 0
     
    58495857     
    58505858 END MODULE chemistry_model_mod
    5851 
  • palm/trunk/SOURCE/header.f90

    r4196 r4227  
    2525! -----------------
    2626! $Id$
     27! implement new palm_date_time_mod
     28!
     29! 4223 2019-09-10 09:20:47Z gronemeier
    2730! Write information about rotation angle
    2831!
     
    7578        ONLY:  log_point_s
    7679
    77     USE date_and_time_mod,                                                     &
    78         ONLY:  day_of_year_init, time_utc_init
    79 
    8080    USE grid_variables,                                                        &
    8181        ONLY:  dx, dy
     
    100100               sa_vertical_gradient, sa_vertical_gradient_level,               &
    101101               sa_vertical_gradient_level_ind
     102
     103    USE palm_date_time_mod,                                                    &
     104        ONLY:  get_date_time
    102105
    103106    USE pegrid
     
    137140    CHARACTER (LEN=70) ::  char1               !< dummy varialbe used for various strings
    138141    CHARACTER (LEN=70) ::  char2               !< string containing informating about the advected distance in case of Galilei transformation
     142    CHARACTER (LEN=23) ::  date_time_str       !< string for date and time information
    139143    CHARACTER (LEN=70) ::  dopr_chr            !< string indicating profile output variables
    140144    CHARACTER (LEN=70) ::  do2d_xy             !< string indicating 2D-xy output variables
     
    14721476
    14731477!
    1474 !-- Day of year, UTC
    1475     WRITE ( io, 456 )  day_of_year_init, time_utc_init
    1476    
     1478!-- Day and time during model start
     1479    CALL get_date_time( 0.0_wp, date_time_str=date_time_str )
     1480    WRITE ( io, 456 )  TRIM( date_time_str )
     1481
    14771482!
    14781483!-- Other quantities
     
    18581863454 FORMAT ('    TKE is not allowed to fall below ',E9.2,' (m/s)**2')
    18591864455 FORMAT ('    initial TKE is prescribed as ',E9.2,' (m/s)**2')
    1860 456 FORMAT (/'    Day of the year at model start :   day_init      =     ',I3 &
    1861             /'    UTC time at model start        :   time_utc_init = ',F7.1,' s')
     1865456 FORMAT (/'    Date and time at model start : ',A)
    18621866457 FORMAT ('    RANS-mode constants: c_0 = ',F9.5/         &
    18631867            '                         c_1 = ',F9.5/         &
  • palm/trunk/SOURCE/indoor_model_mod.f90

    r4217 r4227  
    2121! Current revisions:
    2222! -----------------
    23 !
    24 !
     23! 
     24! 
    2525! Former revisions:
    2626! -----------------
    2727! $Id$
     28! implement new palm_date_time_mod
     29!
     30! 4217 2019-09-04 09:47:05Z scharf
    2831! Corrected "Former revisions" section
    2932!
     
    10531056!         ONLY:  c_p
    10541057
    1055 !     USE control_parameters,                                                    &
    1056 !         ONLY:  rho_surface
    1057 
    1058     USE date_and_time_mod,                                                     &
    1059         ONLY:  time_utc
     1058    USE control_parameters,                                                    &
     1059        ONLY:  time_since_reference_point
    10601060
    10611061    USE grid_variables,                                                        &
    10621062        ONLY:  dx, dy
     1063
     1064    USE palm_date_time_mod,                                                    &
     1065        ONLY:  get_date_time, seconds_per_hour
    10631066
    10641067    USE pegrid
     
    10851088    REAL(wp) ::  indoor_wall_window_temperature   !< weighted temperature of innermost wall/window layer
    10861089    REAL(wp) ::  near_facade_temperature          !< outside air temperature 10cm away from facade
     1090    REAL(wp) ::  second_of_day                    !< second of the current day
    10871091    REAL(wp) ::  time_utc_hour                    !< time of day (hour UTC)
    10881092
     
    10911095!
    10921096!-- Determine time of day in hours.
    1093     time_utc_hour = time_utc / 3600.0_wp
     1097    CALL get_date_time( time_since_reference_point, second_of_day=second_of_day )
     1098    time_utc_hour = second_of_day / seconds_per_hour
    10941099!
    10951100!-- Following calculations must be done for each facade element.
  • palm/trunk/SOURCE/init_3d_model.f90

    r4187 r4227  
    2525! -----------------
    2626! $Id$
     27! implement new palm_date_time_mod
     28!
     29! 4223 2019-09-10 09:20:47Z gronemeier
    2730! Deallocate temporary string array since it may be re-used to read different
    2831! input data in other modules
     
    177180        ONLY:  nesting_offl_init
    178181
     182    USE palm_date_time_mod,                                                    &
     183        ONLY:  set_reference_date_time
     184
    179185    USE pegrid
    180186
     
    266272   
    267273    CALL location_message( 'model initialization', 'start' )
     274!
     275!-- Set reference date-time
     276    CALL set_reference_date_time( date_time_str=origin_date_time )
    268277
    269278    IF ( debug_output )  CALL debug_message( 'allocating arrays', 'start' )
  • palm/trunk/SOURCE/modules.f90

    r4196 r4227  
    2525! -----------------
    2626! $Id$
     27! Add origin_date_time
     28!
     29! 4146 2019-08-07 07:47:36Z gronemeier
    2730! Added rotation_angle
    2831!
     
    471474    CHARACTER (LEN=8)    ::  coupling_char = ''                           !< appended to filenames in coupled or nested runs ('_O': ocean PE,
    472475                                                                          !< '_NV': vertically nested atmosphere PE, '_N##': PE of nested domain ##
     476    CHARACTER (LEN=23)   ::  origin_date_time = '2019-06-21 12:00:00 +00' !< date and time to be simulated
    473477    CHARACTER (LEN=10)   ::  run_date = ' '                               !< date of simulation run
    474478    CHARACTER (LEN=8)    ::  run_time = ' '                               !< time of simulation run
  • palm/trunk/SOURCE/nesting_offl_mod.f90

    r4226 r4227  
    2020! Current revisions:
    2121! ------------------
    22 !
     22! implement new palm_date_time_mod
    2323!
    2424! Former revisions:
     
    164164               log_point_s
    165165
    166     USE date_and_time_mod,                                                     &
    167         ONLY:  time_utc_init
    168 
    169166    USE grid_variables
    170167
     
    191188               pids_id
    192189
     190    USE palm_date_time_mod,                                                    &
     191        ONLY:  get_date_time
     192
    193193    USE pegrid
    194194
     
    274274
    275275    REAL(wp) ::  fac_dt              !< interpolation factor
     276    REAL(wp) ::  time_utc_init       !< time in seconds-of-day of origin_date_time
    276277    REAL(wp) ::  zi_ribulk = 0.0_wp  !< boundary-layer depth according to bulk Richardson criterion, i.e. the height where Ri_bulk exceeds the critical
    277278                                     !< bulk Richardson number of 0.2
     
    18001801       INTEGER(iwp) ::  n !< running index for chemical species
    18011802
     1803!
     1804!--    Get time_utc_init from origin_date_time
     1805       CALL get_date_time( 0.0_wp, second_of_day = time_utc_init )
    18021806
    18031807!--    Allocate arrays for geostrophic wind components. Arrays will
  • palm/trunk/SOURCE/netcdf_interface_mod.f90

    r4196 r4227  
    2525! -----------------
    2626! $Id$
     27! Replace function date_time_string by call to get_date_time
     28!
     29! 4223 2019-09-10 09:20:47Z gronemeier
    2730! replaced rotation angle from input-netCDF file
    2831! by namelist parameter 'rotation_angle'
     
    68696872        ONLY:  revision, run_date, run_time, run_zone, runnr, version
    68706873
    6871     USE date_and_time_mod,                                                     &
    6872        ONLY:   day_of_year_init, time_utc_init
    6873 
    68746874    USE netcdf_data_input_mod,                                                 &
    68756875        ONLY:  input_file_atts
    68766876
     6877    USE palm_date_time_mod,                                                    &
     6878        ONLY:  date_time_str_len, get_date_time
     6879
    68776880    IMPLICIT NONE
    68786881
    6879     CHARACTER(LEN=23) ::  origin_time_string  !< string containing date and time of origin
     6882    CHARACTER(LEN=date_time_str_len) ::  origin_time_string  !< string containing date-time of origin
    68806883
    68816884    CHARACTER(LEN=*), INTENT(IN)  ::  data_content  !< describes the type of data in file
     
    68856888    INTEGER, INTENT(IN)  ::  ncid      !< file id
    68866889!
    6887 !-- Compose date-time string for origin_time
    6888     origin_time_string = date_time_string( day_of_year_init, time_utc_init )
     6890!-- Get date-time string for origin_time
     6891    CALL get_date_time( 0.0_wp, date_time_str=origin_time_string )
    68896892
    68906893#if defined( __netcdf )
     
    72427245 END SUBROUTINE convert_utm_to_geographic
    72437246
    7244  !------------------------------------------------------------------------------!
    7245  ! Description:
    7246  ! ------------
    7247  !> Compose string containing date and time of format 'YYYY-MM-DD hh:mm:ss ZZZ'
    7248  !> from day_of_year and second_of_day.
    7249  !------------------------------------------------------------------------------!
    7250  FUNCTION date_time_string( day_of_year, second_of_day )
    7251 
    7252     IMPLICIT NONE
    7253 
    7254     CHARACTER(LEN=1) ::  plus_minus  !< either '+' or '-'
    7255 
    7256     CHARACTER(LEN=23) ::  date_time_string  !< string containing date and time
    7257 
    7258     INTEGER(iwp) ::  day          !< day of month
    7259     INTEGER(iwp) ::  err          !< error code
    7260     INTEGER(iwp) ::  i            !< loop index
    7261     INTEGER(iwp) ::  hour         !< hour of the day
    7262     INTEGER(iwp) ::  minute       !< minute of the hour
    7263     INTEGER(iwp) ::  month        !< month of year
    7264     INTEGER(iwp) ::  year = 2019  !< year (no leap year)
    7265     INTEGER(iwp) ::  zone = 0     !< time zone
    7266 
    7267     INTEGER(iwp), INTENT(IN) ::  day_of_year  !< day of year to start with
    7268 
    7269     INTEGER, DIMENSION(12) :: days_per_month = &  !< total number of days for
    7270     (/31,28,31,30,31,30,31,31,30,31,30,31/)       !< each month (no leap year)
    7271 
    7272     REAL(wp) ::  second  !< second of the minute
    7273 
    7274     REAL(wp), INTENT(IN) ::  second_of_day  !< second of the day
    7275 
    7276 
    7277     err = 0_iwp
    7278 !
    7279 !-- Check day_of_year
    7280     IF ( day_of_year < 1_iwp .OR. day_of_year > SUM(days_per_month) )  THEN
    7281        err = err + 1_iwp
    7282     ENDIF
    7283 !
    7284 !-- Check second_of_day
    7285     IF ( second_of_day < 0.0_wp  .OR.  second_of_day > 86400.0_wp )  THEN
    7286        err = err + 2_iwp
    7287     ENDIF
    7288 !
    7289 !-- Execute only if given values are valid
    7290     IF ( err == 0_iwp )  THEN
    7291 
    7292        day = day_of_year
    7293        month = 0_iwp
    7294 
    7295        DO  i = 1, 12
    7296           day = day - days_per_month(i)
    7297           IF ( day < 0 )  THEN
    7298              day = day + days_per_month(i)
    7299              month = i
    7300              EXIT
    7301           ENDIF
    7302        ENDDO
    7303 
    7304        hour = INT( second_of_day / 3600.0_wp, KIND=iwp )
    7305 
    7306        second = second_of_day - 3600.0_wp * REAL( hour, KIND=wp )
    7307 
    7308        minute =  INT( second / 60.0_wp, KIND=iwp )
    7309 
    7310        second = second - 60.0_wp * REAL( minute, KIND=wp )
    7311 
    7312        IF ( zone < 0_iwp )  THEN
    7313           plus_minus = '-'
    7314        ELSE
    7315           plus_minus = '+'
    7316        ENDIF
    7317 
    7318        WRITE( date_time_string, 100 )                               &
    7319           year, month, day, hour, minute, INT( second, KIND=iwp ),  &
    7320           plus_minus, zone
    7321 
    7322     ELSE
    7323 !
    7324 !--   Return empty string if input is invalid
    7325       date_time_string = REPEAT( " ", LEN(date_time_string) )
    7326 
    7327     ENDIF
    7328 
    7329  100 FORMAT (I4,'-',I2.2,'-',I2.2,1X,I2.2,':',I2.2,':',I2.2,1X,A1,I2.2)
    7330 
    7331  END FUNCTION date_time_string
    7332 
    73337247 END MODULE netcdf_interface
  • palm/trunk/SOURCE/palm.f90

    r4182 r4227  
    2525! -----------------
    2626! $Id$
     27! implement new palm_date_time_mod
     28!
     29! 4094 2019-07-12 09:24:21Z gronemeier
    2730! Corrected "Former revisions" section
    2831!
     
    7780    USE cpulog,                                                                &
    7881        ONLY:  cpu_log, log_point, log_point_s, cpu_statistics
    79 
    80     USE date_and_time_mod,                                                     &
    81         ONLY:  calc_date_and_time, init_date_and_time
    8282
    8383    USE diagnostic_output_quantities_mod,                                      &
     
    267267!-- Check control parameters and deduce further quantities
    268268    CALL check_parameters
    269 !
    270 !-- Initial time for chem_emissions_mod
    271     CALL init_date_and_time
    272269
    273270    CALL init_3d_model
  • palm/trunk/SOURCE/parin.f90

    r4196 r4227  
    2525! -----------------
    2626! $Id$
     27! implement new palm_date_time_mod
     28!
     29! 4146 2019-08-07 07:47:36Z gronemeier
    2730! added rotation_angle to initialization_parameters
    2831!
     
    9497    USE cpulog,                                                                &
    9598        ONLY:  cpu_log_barrierwait
    96 
    97     USE date_and_time_mod,                                                     &
    98         ONLY:  date_init, day_of_year_init, time_utc_init
    9999
    100100    USE grid_variables,                                                        &
     
    164164             cycle_mg, damp_level_1d,                                          &
    165165             data_output_during_spinup,                                        &
    166              date_init,                                                        &
    167              day_of_year_init,                                                 &
     166             origin_date_time,                                                 &
    168167             dissipation_1d,                                                   &
    169168             dp_external, dp_level_b, dp_smooth, dpdxy,    &
     
    203202             surface_scalarflux, surface_waterflux,                            &
    204203             s_surface, s_surface_initial_change, s_vertical_gradient,         &
    205              s_vertical_gradient_level, time_utc_init, timestep_scheme,        &
     204             s_vertical_gradient_level, timestep_scheme,                       &
    206205             topography, topography_grid_convention, top_heatflux,             &
    207206             top_momentumflux_u, top_momentumflux_v,                           &
     
    238237             cycle_mg, damp_level_1d,                                          &
    239238             data_output_during_spinup,                                        &
    240              date_init,                                                        &
    241              day_of_year_init,                                                 &
     239             origin_date_time,                                                 &
    242240             dissipation_1d,                                                   &
    243241             dp_external, dp_level_b, dp_smooth, dpdxy,                        &
     
    276274             surface_scalarflux, surface_waterflux,                            &
    277275             s_surface, s_surface_initial_change, s_vertical_gradient,         &
    278              s_vertical_gradient_level, time_utc_init, timestep_scheme,        &
     276             s_vertical_gradient_level, timestep_scheme,                       &
    279277             topography, topography_grid_convention, top_heatflux,             &
    280278             top_momentumflux_u, top_momentumflux_v,                           &
  • palm/trunk/SOURCE/radiation_model_mod.f90

    r4226 r4227  
    2828! -----------------
    2929! $Id$
     30! implement new palm_date_time_mod
     31!
     32! 4226 2019-09-10 17:03:24Z suehring
    3033! - Netcdf input routine for dimension length renamed
    3134! - Define time variable for external radiation input relative to time_utc_init
     
    232235         ONLY:  ddx, ddy, dx, dy
    233236
    234     USE date_and_time_mod,                                                     &
    235         ONLY:  calc_date_and_time, d_hours_day, d_seconds_hour, d_seconds_year,&
    236                day_of_year, d_seconds_year, day_of_month, day_of_year_init,    &
    237                init_date_and_time, month_of_year, time_utc_init, time_utc
    238 
    239237    USE indices,                                                               &
    240238        ONLY:  nnx, nny, nx, nxl, nxlg, nxr, nxrg, ny, nyn, nyng, nys, nysg,   &
     
    275273               real_1d_3d,                                                     &
    276274               vars_pids
     275
     276    USE palm_date_time_mod,                                                    &
     277        ONLY:  date_time_str_len, get_date_time,                               &
     278               hours_per_day, seconds_per_hour
    277279
    278280    USE plant_canopy_model_mod,                                                &
     
    387389                time_radiation = 0.0_wp            !< time since last call of radiation code
    388390
     391    INTEGER(iwp) ::  day_of_year   !< day of the current year
    389392
    390393    REAL(wp) ::  cos_zenith        !< cosine of solar zenith angle, also z-coordinate of solar unit vector
     394    REAL(wp) ::  d_hours_day       !< 1 / hours-per-day
     395    REAL(wp) ::  d_seconds_hour    !< 1 / seconds-per-hour
     396    REAL(wp) ::  second_of_day     !< second of the current day
    391397    REAL(wp) ::  sun_dir_lat       !< y-coordinate of solar unit vector
    392398    REAL(wp) ::  sun_dir_lon       !< x-coordinate of solar unit vector
     
    15201526          CALL message( 'init_3d_model', 'PA0348', 0, 1, 0, 6, 0 )
    15211527       ENDIF
     1528!
     1529!--    Precalculate some time constants
     1530       d_hours_day    = 1.0_wp / REAL( hours_per_day, KIND = wp )
     1531       d_seconds_hour = 1.0_wp / seconds_per_hour
     1532
    15221533!
    15231534!--    If required, initialize radiation interactions between surfaces
     
    22802291!--       Calculate initial values of current (cosine of) the zenith angle and
    22812292!--       whether the sun is up
    2282           CALL calc_zenith
    2283 !
    2284 !--       readjust date and time to its initial value
    2285           CALL init_date_and_time
     2293          CALL get_date_time( time_since_reference_point, &
     2294                              day_of_year=day_of_year,    &
     2295                              second_of_day=second_of_day )
     2296          CALL calc_zenith( day_of_year, second_of_day )
    22862297!
    22872298!--       Calculate initial surface albedo for different surfaces
     
    26402651          ENDIF
    26412652         
    2642           IF ( time_rad_f%var1d(0) /= time_utc_init )  THEN
     2653          CALL get_date_time( 0.0_wp, second_of_day=second_of_day )
     2654
     2655          IF ( time_rad_f%var1d(0) /= second_of_day )  THEN
    26432656             message_string = 'External radiation forcing: first point in ' // &
    2644                               'time is /= time_utc_init.'
     2657                              'time is /= origin_date_time.'
    26452658             CALL message( 'radiation_init', 'PA0313', 1, 2, 0, 6, 0 )
    26462659          ENDIF
    26472660         
    26482661          IF ( end_time - spinup_time > time_rad_f%var1d(ntime-1)              &
    2649                                       - time_utc_init )  THEN
     2662                                      - second_of_day )  THEN
    26502663             message_string = 'External radiation forcing does not cover ' //  &
    26512664                              'the entire simulation time.'
     
    27652778
    27662779       END SELECT
    2767 !
    2768 !--    Readjust date and time to its initial value
    2769        CALL init_date_and_time
    27702780
    27712781!
     
    28212831       LOGICAL      ::  horizontal !< flag indicating treatment of horinzontal surfaces
    28222832       
    2823        REAL(wp) ::  fac_dt     !< interpolation factor 
     2833       REAL(wp) ::  fac_dt               !< interpolation factor 
     2834       REAL(wp) ::  second_of_day_init   !< second of the day at model start
    28242835
    28252836       TYPE(surf_type), POINTER ::  surf !< pointer on respective surface type, used to generalize routine   
     
    28272838!
    28282839!--    Calculate current zenith angle
    2829        CALL calc_zenith
     2840       CALL get_date_time( time_since_reference_point, &
     2841                           day_of_year=day_of_year,    &
     2842                           second_of_day=second_of_day )
     2843       CALL calc_zenith( day_of_year, second_of_day )
    28302844!
    28312845!--    Interpolate external radiation on current timestep
     
    28352849          fac_dt = 0
    28362850       ELSE
     2851          CALL get_date_time( 0.0_wp, second_of_day=second_of_day_init )
    28372852          t = 0
    28382853          DO WHILE ( time_rad_f%var1d(t) <=                                    &
    2839                      time_since_reference_point + time_utc_init )
     2854                     time_since_reference_point + second_of_day_init )
    28402855             t = t + 1
    28412856          ENDDO
     
    28432858          tm = MAX( t-1, 0 )
    28442859         
    2845           fac_dt = ( time_since_reference_point + time_utc_init                &
     2860          fac_dt = ( time_since_reference_point + second_of_day_init           &
    28462861                   - time_rad_f%var1d(tm) + dt_3d )                            &
    28472862                 / ( time_rad_f%var1d(t)  - time_rad_f%var1d(tm) )
     
    30673082    SUBROUTINE radiation_clearsky
    30683083
    3069 
    30703084       IMPLICIT NONE
    30713085
    30723086       INTEGER(iwp) ::  l         !< running index for surface orientation
    3073        
     3087
    30743088       LOGICAL      ::  horizontal !< flag indicating treatment of horinzontal surfaces
    3075        
     3089
    30763090       REAL(wp)     ::  pt1       !< potential temperature at first grid level or mean value at urban layer top
    30773091       REAL(wp)     ::  pt1_l     !< potential temperature at first grid level or mean value at urban layer top at local subdomain
     
    30833097!
    30843098!--    Calculate current zenith angle
    3085        CALL calc_zenith
     3099       CALL get_date_time( time_since_reference_point, &
     3100                           day_of_year=day_of_year,    &
     3101                           second_of_day=second_of_day )
     3102       CALL calc_zenith( day_of_year, second_of_day )
    30863103
    30873104!
     
    36323649           ONLY:  nbgp
    36333650
     3651       USE palm_date_time_mod,                                                 &
     3652           ONLY:  hours_per_day
     3653
    36343654       USE particle_attributes,                                                &
    36353655           ONLY:  grid_particles, number_of_particles, particles, prt_count
     
    36423662       INTEGER(iwp) ::  k_topo     !< topography top index
    36433663
     3664       REAL(wp)     ::  d_hours_day  !< 1 / hours-per-day
    36443665       REAL(wp)     ::  nc_rad, &    !< number concentration of cloud droplets
    36453666                        s_r2,   &    !< weighted sum over all droplets with r^2
     
    36623683
    36633684!
     3685!--    Pre-calculate parameters
     3686       d_hours_day = 1.0_wp / REAL( hours_per_day, KIND=wp )
     3687
     3688!
    36643689!--    Calculate current (cosine of) zenith angle and whether the sun is up
    3665        CALL calc_zenith     
     3690       CALL get_date_time( time_since_reference_point, &
     3691                           day_of_year=day_of_year,    &
     3692                           second_of_day=second_of_day )
     3693       CALL calc_zenith( day_of_year, second_of_day )
    36663694       zenith(0) = cos_zenith
    36673695!
     
    45484576!> Calculate the cosine of the zenith angle (variable is called zenith)
    45494577!------------------------------------------------------------------------------!
    4550     SUBROUTINE calc_zenith
     4578    SUBROUTINE calc_zenith( day_of_year, second_of_day )
     4579
     4580       USE palm_date_time_mod,                                                 &
     4581           ONLY:  seconds_per_day
    45514582
    45524583       IMPLICIT NONE
    45534584
    4554        REAL(wp) ::  declination,  & !< solar declination angle
    4555                     hour_angle      !< solar hour angle
    4556 !
    4557 !--    Calculate current day and time based on the initial values and simulation
    4558 !--    time
    4559        CALL calc_date_and_time
    4560 
    4561 !
    4562 !--    Calculate solar declination and hour angle   
     4585       INTEGER(iwp), INTENT(IN) ::  day_of_year    !< day of the year
     4586
     4587       REAL(wp)                 ::  declination    !< solar declination angle
     4588       REAL(wp)                 ::  hour_angle     !< solar hour angle
     4589       REAL(wp),     INTENT(IN) ::  second_of_day  !< current time of the day in UTC
     4590
     4591!
     4592!--    Calculate solar declination and hour angle
    45634593       declination = ASIN( decl_1 * SIN(decl_2 * REAL(day_of_year, KIND=wp) - decl_3) )
    4564        hour_angle  = 2.0_wp * pi * (time_utc / 86400.0_wp) + lon - pi
     4594       hour_angle  = 2.0_wp * pi * ( second_of_day / seconds_per_day ) + lon - pi
    45654595
    45664596!
     
    54175447
    54185448     sun_direction = .TRUE.
    5419      CALL calc_zenith  !< required also for diffusion radiation
    5420 
     5449     CALL get_date_time( time_since_reference_point, &
     5450                         day_of_year=day_of_year,    &
     5451                         second_of_day=second_of_day )
     5452     CALL calc_zenith( day_of_year, second_of_day ) !< required also for diffusion radiation
     5453
     5454!
    54215455!--     prepare rotated normal vectors and irradiance factor
    54225456     vnorm(1,:) = kdir(:)
     
    62406274!------------------------------------------------------------------------------!
    62416275    SUBROUTINE calc_diffusion_radiation
    6242    
    6243         INTEGER(iwp)         ::  i                       !< grid index x-direction
    6244         INTEGER(iwp)         ::  j                       !< grid index y-direction
    6245        
    6246         REAL(wp)             ::  year_angle              !< angle
    6247         REAL(wp)             ::  etr                     !< extraterestrial radiation
    6248         REAL(wp)             ::  corrected_solarUp       !< corrected solar up radiation
    6249         REAL(wp)             ::  horizontalETR           !< horizontal extraterestrial radiation
    6250         REAL(wp)             ::  clearnessIndex          !< clearness index
    6251         REAL(wp)             ::  diff_frac               !< diffusion fraction of the radiation
    6252        
    6253         REAL(wp), PARAMETER  ::  lowest_solarUp = 0.1_wp  !< limit the sun elevation to protect stability of the calculation
    6254 
     6276
     6277       USE palm_date_time_mod,                                                 &
     6278           ONLY:  seconds_per_day
     6279
     6280       INTEGER(iwp)        ::  i                        !< grid index x-direction
     6281       INTEGER(iwp)        ::  j                        !< grid index y-direction
     6282       INTEGER(iwp)        ::  days_per_year            !< days in the current year
     6283
     6284       REAL(wp)            ::  clearnessIndex           !< clearness index
     6285       REAL(wp)            ::  corrected_solarUp        !< corrected solar up radiation
     6286       REAL(wp)            ::  diff_frac                !< diffusion fraction of the radiation
     6287       REAL(wp)            ::  etr                      !< extraterestrial radiation
     6288       REAL(wp)            ::  horizontalETR            !< horizontal extraterestrial radiation
     6289       REAL(wp), PARAMETER ::  lowest_solarUp = 0.1_wp  !< limit the sun elevation to protect stability of the calculation
     6290       REAL(wp)            ::  second_of_year           !< current second of the year
     6291       REAL(wp)            ::  year_angle               !< angle
     6292
     6293!
    62556294!--     Calculate current day and time based on the initial values and simulation time
    6256         year_angle = ( (day_of_year_init * 86400) + time_utc_init              &
    6257                         + time_since_reference_point )  * d_seconds_year       &
    6258                         * 2.0_wp * pi
    6259        
     6295        CALL get_date_time( time_since_reference_point,      &
     6296                            second_of_year = second_of_year, &
     6297                            days_per_year = days_per_year    )
     6298        year_angle = second_of_year / ( REAL( days_per_year, KIND=wp ) * seconds_per_day ) &
     6299                   * 2.0_wp * pi
     6300
    62606301        etr = solar_constant * (1.00011_wp +                                   &
    62616302                          0.034221_wp * cos(year_angle) +                      &
     
    62636304                          0.000719_wp * cos(2.0_wp * year_angle) +             &
    62646305                          0.000077_wp * sin(2.0_wp * year_angle))
    6265 !       
     6306        
    62666307!--   
    62676308!--     Under a very low angle, we keep extraterestrial radiation at
     
    85648605      IMPLICIT NONE
    85658606
    8566       INTEGER(iwp)                              ::  it, i, j
    8567       INTEGER(iwp)                              ::  day_of_month_prev,month_of_year_prev
    8568       REAL(wp)                                  ::  tsrp_prev
    8569       REAL(wp)                                  ::  simulated_time_prev
    8570       REAL(wp), DIMENSION(:,:), ALLOCATABLE     ::  dsidir_tmp       !< dsidir_tmp[:,i] = unit vector of i-th
    8571                                                                      !< appreant solar direction
     8607      INTEGER(iwp) ::  it, i, j                           !< loop indices
     8608
     8609      REAL(wp), DIMENSION(:,:), ALLOCATABLE :: dsidir_tmp !< dsidir_tmp[:,i] = unit vector of i-th
     8610                                                          !< appreant solar direction
    85728611
    85738612      ALLOCATE ( dsidir_rev(0:raytrace_discrete_elevs/2-1,                 &
     
    85778616                     raytrace_discrete_elevs/2*raytrace_discrete_azims) )
    85788617      ndsidir = 0
    8579 
    8580 !
    8581 !--   We will artificialy update time_since_reference_point and return to
    8582 !--   true value later
    8583       tsrp_prev = time_since_reference_point
    8584       simulated_time_prev = simulated_time
    8585       day_of_month_prev = day_of_month
    8586       month_of_year_prev = month_of_year
    85878618      sun_direction = .TRUE.
    8588 
    8589 !
    8590 !--   initialize the simulated_time
    8591       simulated_time = 0._wp
     8619     
    85928620!
    85938621!--   Process spinup time if configured
    85948622      IF ( spinup_time > 0._wp )  THEN
    85958623         DO  it = 0, CEILING(spinup_time / dt_spinup)
    8596             time_since_reference_point = -spinup_time + REAL(it, wp) * dt_spinup
    8597             simulated_time = simulated_time + dt_spinup
    8598             CALL simulate_pos
     8624            CALL simulate_pos( it * dt_spinup - spinup_time )
    85998625         ENDDO
    86008626      ENDIF
     
    86028628!--   Process simulation time
    86038629      DO  it = 0, CEILING(( end_time - spinup_time ) / dt_radiation)
    8604          time_since_reference_point = REAL(it, wp) * dt_radiation
    8605          simulated_time = simulated_time + dt_radiation
    8606          CALL simulate_pos
     8630         CALL simulate_pos( it * dt_radiation )
    86078631      ENDDO
    86088632!
    8609 !--   Return date and time to its original values
    8610       time_since_reference_point = tsrp_prev
    8611       simulated_time = simulated_time_prev
    8612       day_of_month = day_of_month_prev
    8613       month_of_year = month_of_year_prev
    8614       CALL init_date_and_time
    8615 
    86168633!--   Allocate global vars which depend on ndsidir
    86178634      ALLOCATE ( dsidir ( 3, ndsidir ) )
     
    86348651      !> Simuates a single position
    86358652      !------------------------------------------------------------------------!
    8636       SUBROUTINE simulate_pos
    8637          IMPLICIT NONE
     8653      SUBROUTINE simulate_pos( time_since_reference_local )
     8654
     8655         REAL(wp), INTENT(IN) ::  time_since_reference_local  !< local time since reference
    86388656!
    86398657!--      Update apparent solar position based on modified t_s_r_p
    8640          CALL calc_zenith
     8658         CALL get_date_time( time_since_reference_local, &
     8659                             day_of_year=day_of_year,    &
     8660                             second_of_day=second_of_day )
     8661         CALL calc_zenith( day_of_year, second_of_day )
    86418662         IF ( cos_zenith > 0 )  THEN
    86428663!--         
  • palm/trunk/SOURCE/read_restart_data_mod.f90

    r4182 r4227  
    2525! -----------------
    2626! $Id$
     27! implement new palm_date_time_mod and increased binary version
     28!
     29! 4146 2019-08-07 07:47:36Z gronemeier
    2730! Corrected "Former revisions" section
    2831!
     
    9497        ONLY:  cpu_log, log_point_s
    9598
    96     USE date_and_time_mod,                                                     &
    97         ONLY:  day_of_year_init, time_utc_init
    98 
    9999    USE diagnostic_output_quantities_mod,                                      &
    100100        ONLY:  ti_av, uu_av, vv_av, ww_av
     
    193193       READ ( 13 )  version_on_file
    194194
    195        binary_version_global = '4.8'
     195       binary_version_global = '4.9'
    196196       IF ( TRIM( version_on_file ) /= TRIM( binary_version_global ) )  THEN
    197197          WRITE( message_string, * ) 'version mismatch concerning ',           &
     
    374374             CASE ( 'damp_level_1d' )
    375375                READ ( 13 )  damp_level_1d
    376              CASE ( 'day_of_year_init' )
    377                 READ ( 13 )  day_of_year_init
     376             CASE ( 'origin_date_time' )
     377                READ ( 13 )  origin_date_time
    378378             CASE ( 'dissipation_1d' )
    379379                READ ( 13 )  dissipation_1d
     
    638638             CASE ( 'time_since_reference_point' )
    639639                READ ( 13 )  time_since_reference_point
    640              CASE ( 'time_utc_init' )
    641                 READ ( 13 )  time_utc_init
    642640             CASE ( 'time_virtual_measurement' )
    643641                READ ( 13 )  time_virtual_measurement
  • palm/trunk/SOURCE/salsa_mod.f90

    r4226 r4227  
    2626! -----------------
    2727! $Id$
     28! implement new palm_date_time_mod
     29!
     30! 4226 2019-09-10 17:03:24Z suehring
    2831! Netcdf input routine for dimension length renamed
    2932!
     
    83858388 SUBROUTINE salsa_emission_setup( init )
    83868389
    8387     USE date_and_time_mod,                                                                         &
    8388         ONLY:  day_of_month, hour_of_day, index_dd, index_hh, index_mm, month_of_year,             &
    8389                time_default_indices, time_utc_init
    8390 
    83918390    USE netcdf_data_input_mod,                                                                     &
    83928391        ONLY:  check_existence, close_input_file, get_attribute, get_variable,                     &
     
    83948393               get_dimension_length, open_read_file, street_type_f
    83958394
     8395    USE palm_date_time_mod,                                                                        &
     8396        ONLY:  days_per_week, get_date_time, hours_per_day, months_per_year, seconds_per_hour
     8397
    83968398    USE surface_mod,                                                                               &
    83978399        ONLY:  surf_def_h, surf_lsm_h, surf_usm_h
     
    84038405    CHARACTER(LEN=25) ::  mod_name             !< name in the input file
    84048406
    8405     INTEGER(iwp) ::  i         !< loop index
    8406     INTEGER(iwp) ::  ib        !< loop index: aerosol number bins
    8407     INTEGER(iwp) ::  ic        !< loop index: aerosol chemical components
    8408     INTEGER(iwp) ::  id_salsa  !< NetCDF id of aerosol emission input file
    8409     INTEGER(iwp) ::  in        !< loop index: emission category
    8410     INTEGER(iwp) ::  inn       !< loop index
    8411     INTEGER(iwp) ::  j         !< loop index
    8412     INTEGER(iwp) ::  ss        !< loop index
     8407    INTEGER(iwp) ::  day_of_month   !< day of the month
     8408    INTEGER(iwp) ::  day_of_week    !< day of the week
     8409    INTEGER(iwp) ::  day_of_year    !< day of the year
     8410    INTEGER(iwp) ::  hour_of_day    !< hour of the day
     8411    INTEGER(iwp) ::  i              !< loop index
     8412    INTEGER(iwp) ::  ib             !< loop index: aerosol number bins
     8413    INTEGER(iwp) ::  ic             !< loop index: aerosol chemical components
     8414    INTEGER(iwp) ::  id_salsa       !< NetCDF id of aerosol emission input file
     8415    INTEGER(iwp) ::  in             !< loop index: emission category
     8416    INTEGER(iwp) ::  index_dd       !< index day
     8417    INTEGER(iwp) ::  index_hh       !< index hour
     8418    INTEGER(iwp) ::  index_mm       !< index month
     8419    INTEGER(iwp) ::  inn            !< loop index
     8420    INTEGER(iwp) ::  j              !< loop index
     8421    INTEGER(iwp) ::  month_of_year  !< month of the year
     8422    INTEGER(iwp) ::  ss             !< loop index
    84138423
    84148424    INTEGER(iwp), DIMENSION(maxspec) ::  cc_i2m   !<
     
    84178427
    84188428    LOGICAL, INTENT(in) ::  init  !< if .TRUE. --> initialisation call
     8429
     8430    REAL(wp) ::  second_of_day    !< second of the day
    84198431
    84208432    REAL(wp), DIMENSION(:), ALLOCATABLE ::  nsect_emission  !< sectional number emission
     
    86628674!
    86638675!--             Next emission update
    8664                 next_aero_emission_update = MOD( time_utc_init, 3600.0_wp ) - 3600.0_wp
     8676                CALL get_date_time( 0.0_wp, second_of_day=second_of_day )
     8677                next_aero_emission_update = MOD( second_of_day, seconds_per_hour ) - seconds_per_hour
    86658678!
    86668679!--             Get chemical composition (i.e. mass fraction of different species) in aerosols
     
    88188831!
    88198832!--             Get the index of the current hour
    8820                 CALL time_default_indices( month_of_year, day_of_month, hour_of_day, index_hh )
     8833                CALL get_date_time( time_since_reference_point, &
     8834                                    day_of_year=day_of_year, hour=hour_of_day )
     8835                index_hh = ( day_of_year - 1_iwp ) * hours_per_day + hour_of_day
    88218836                aero_emission_att%time_factor = aero_emission_att%etf(:,index_hh)
    88228837
     
    88258840!--             Get the index of current hour (index_hh) (TODO: Now "workday" is always assumed.
    88268841!--             Needs to be calculated.)
    8827                 CALL time_default_indices( daytype, month_of_year, day_of_month, hour_of_day,      &
    8828                                            index_mm, index_dd, index_hh )
     8842                CALL get_date_time( time_since_reference_point, &
     8843                                    month=month_of_year,        &
     8844                                    day=day_of_month,           &
     8845                                    hour=hour_of_day,           &
     8846                                    day_of_week=day_of_week     )
     8847                index_mm = month_of_year
     8848                index_dd = months_per_year + day_of_week
     8849                SELECT CASE(TRIM(daytype))
     8850
     8851                   CASE ("workday")
     8852                      index_hh = months_per_year + days_per_week + hour_of_day
     8853
     8854                   CASE ("weekend")
     8855                      index_hh = months_per_year + days_per_week + hours_per_day + hour_of_day
     8856
     8857                   CASE ("holiday")
     8858                      index_hh = months_per_year + days_per_week + 2*hours_per_day + hour_of_day
     8859
     8860                END SELECT
    88298861                aero_emission_att%time_factor = aero_emission_att%etf(:,index_mm) *                &
    88308862                                                aero_emission_att%etf(:,index_dd) *                &
     
    91199151 SUBROUTINE salsa_gas_emission_setup( init )
    91209152
    9121     USE date_and_time_mod,                                                                         &
    9122         ONLY:  day_of_month, hour_of_day, index_dd, index_hh, index_mm, month_of_year,             &
    9123                time_default_indices, time_utc_init
    9124 
    91259153    USE netcdf_data_input_mod,                                                                     &
    91269154        ONLY:  check_existence, close_input_file, get_attribute, get_variable,                     &
     
    91289156               get_dimension_length, open_read_file
    91299157
     9158    USE palm_date_time_mod,                                                                        &
     9159        ONLY:  days_per_week, get_date_time, hours_per_day, months_per_year, seconds_per_hour
     9160
    91309161    USE surface_mod,                                                                               &
    91319162        ONLY:  surf_def_h, surf_lsm_h, surf_usm_h
     
    91389169    CHARACTER(LEN=100), DIMENSION(:), ALLOCATABLE ::  var_names   !<  variable names in input data
    91399170
     9171
     9172    INTEGER(iwp) ::  day_of_month   !< day of the month
     9173    INTEGER(iwp) ::  day_of_week    !< day of the week
     9174    INTEGER(iwp) ::  day_of_year    !< day of the year
     9175    INTEGER(iwp) ::  hour_of_day    !< hour of the day
    91409176    INTEGER(iwp) ::  id_chem        !< NetCDF id of chemistry emission file
    91419177    INTEGER(iwp) ::  i              !< loop index
    91429178    INTEGER(iwp) ::  ig             !< loop index
    91439179    INTEGER(iwp) ::  in             !< running index for emission categories
     9180    INTEGER(iwp) ::  index_dd       !< index day
     9181    INTEGER(iwp) ::  index_hh       !< index hour
     9182    INTEGER(iwp) ::  index_mm       !< index month
    91449183    INTEGER(iwp) ::  j              !< loop index
     9184    INTEGER(iwp) ::  month_of_year  !< month of the year
    91459185    INTEGER(iwp) ::  num_vars       !< number of variables
    91469186
     
    91489188
    91499189    LOGICAL, INTENT(in) ::  init          !< if .TRUE. --> initialisation call
     9190
     9191    REAL(wp) ::  second_of_day    !< second of the day
    91509192
    91519193    REAL(wp), DIMENSION(:), ALLOCATABLE ::  time_factor  !< emission time factor
     
    92589300!
    92599301!--       Next emission update
    9260           next_gas_emission_update = MOD( time_utc_init, 3600.0_wp ) - 3600.0_wp
     9302          CALL get_date_time( time_since_reference_point, second_of_day=second_of_day )
     9303          next_gas_emission_update = MOD( second_of_day, seconds_per_hour ) - seconds_per_hour
    92619304!
    92629305!--       Allocate and read surface emission data (in total PM) (NOTE that "preprocessed" input data
     
    93039346!
    93049347!--       Get the index of the current hour
    9305           CALL time_default_indices( month_of_year, day_of_month, hour_of_day, index_hh )
     9348          CALL get_date_time( time_since_reference_point, &
     9349                              day_of_year=day_of_year, hour=hour_of_day )
     9350          index_hh = ( day_of_year - 1_iwp ) * hours_per_day + hour_of_day
    93069351          time_factor = chem_emission_att%hourly_emis_time_factor(:,index_hh)
    93079352
     
    93109355!--       Get the index of current hour (index_hh) (TODO: Now "workday" is always assumed.
    93119356!--       Needs to be calculated.)
    9312           CALL time_default_indices( daytype, month_of_year, day_of_month, hour_of_day,            &
    9313                                      index_mm, index_dd, index_hh )
     9357          CALL get_date_time( time_since_reference_point, &
     9358                              month=month_of_year,        &
     9359                              day=day_of_month,           &
     9360                              hour=hour_of_day,           &
     9361                              day_of_week=day_of_week     )
     9362          index_mm = month_of_year
     9363          index_dd = months_per_year + day_of_week
     9364          SELECT CASE(TRIM(daytype))
     9365
     9366             CASE ("workday")
     9367                index_hh = months_per_year + days_per_week + hour_of_day
     9368
     9369             CASE ("weekend")
     9370                index_hh = months_per_year + days_per_week + hours_per_day + hour_of_day
     9371
     9372             CASE ("holiday")
     9373                index_hh = months_per_year + days_per_week + 2*hours_per_day + hour_of_day
     9374
     9375          END SELECT
    93149376          time_factor = chem_emission_att%mdh_emis_time_factor(:,index_mm) *                       &
    93159377                        chem_emission_att%mdh_emis_time_factor(:,index_dd) *                       &
  • palm/trunk/SOURCE/time_integration.f90

    r4226 r4227  
    2525! -----------------
    2626! $Id$
     27! implement new palm_date_time_mod
     28!
     29! 4226 2019-09-10 17:03:24Z suehring
    2730! Changes in interface for the offline nesting
    2831!
     
    224227        ONLY:  cpu_log, log_point, log_point_s
    225228
    226     USE date_and_time_mod,                                                                         &
    227         ONLY:  calc_date_and_time, hour_call_emis, hour_of_year
    228 
    229229    USE diagnostic_output_quantities_mod,                                                          &
    230230        ONLY:  doq_calculate,                                                                      &
     
    272272        ONLY:  prho_reference
    273273
     274    USE palm_date_time_mod,                                                                        &
     275        ONLY:  get_date_time
     276
    274277    USE particle_attributes,                                                                       &
    275278        ONLY:  particle_advection, particle_advection_start, use_sgs_for_particles, wang_kernel
     
    367370    CHARACTER (LEN=9) ::  time_to_string   !<
    368371
    369     INTEGER(iwp) ::  ib        !< index for aerosol size bins
    370     INTEGER(iwp) ::  ic        !< index for aerosol mass bins
    371     INTEGER(iwp) ::  icc       !< additional index for aerosol mass bins
    372     INTEGER(iwp) ::  ig        !< index for salsa gases
    373     INTEGER(iwp) ::  lsp
    374     INTEGER(iwp) ::  lsp_usr   !<
    375     INTEGER(iwp) ::  mid       !< masked output running index
    376     INTEGER(iwp) ::  n         !< loop counter for chemistry species
     372    INTEGER(iwp) ::  hour            !< hour of current time
     373    INTEGER(iwp) ::  hour_call_emis  !< last hour where emission was called
     374    INTEGER(iwp) ::  ib              !< index for aerosol size bins
     375    INTEGER(iwp) ::  ic              !< index for aerosol mass bins
     376    INTEGER(iwp) ::  icc             !< additional index for aerosol mass bins
     377    INTEGER(iwp) ::  ig              !< index for salsa gases
     378    INTEGER(iwp) ::  lsp             !<
     379    INTEGER(iwp) ::  lsp_usr         !<
     380    INTEGER(iwp) ::  mid             !< masked output running index
     381    INTEGER(iwp) ::  n               !< loop counter for chemistry species
    377382
    378383    REAL(wp) ::  dt_3d_old  !< temporary storage of timestep to be used for
     
    11921197       IF ( air_chemistry  .AND.  emissions_anthropogenic )  THEN
    11931198!
    1194 !--       Update the time --> kanani: revise location of this CALL
    1195           CALL calc_date_and_time
    1196 !
    11971199!--       Call emission routine only once an hour
    1198           IF ( hour_of_year  >  hour_call_emis )  THEN
     1200          !> @todo Move check of hour_call_emis into chem_emissions_setup
     1201          CALL get_date_time( time_since_reference_point, hour=hour )
     1202          IF ( hour_call_emis /= hour )  THEN
     1203          !> @question Which of these two if-statements is correct?
     1204          ! IF ( hour_of_year  >  hour_call_emis )  THEN
    11991205             CALL chem_emissions_setup( chem_emis_att, chem_emis, n_matched_vars )
    1200              hour_call_emis = hour_of_year
     1206             hour_call_emis = hour
    12011207          ENDIF
    12021208       ENDIF
     
    12361242       time_since_reference_point = simulated_time - coupling_start_time
    12371243       simulated_time_chr         = time_to_string( time_since_reference_point )
    1238 
    1239 
    12401244
    12411245
  • palm/trunk/SOURCE/time_integration_spinup.f90

    r4182 r4227  
    2525! -----------------
    2626! $Id$
     27! implement new palm_date_time_mod
     28!
     29! 4223 2019-09-10 09:20:47Z gronemeier
    2730! Corrected "Former revisions" section
    2831!
     
    7982        ONLY:  cpu_log, log_point_s
    8083
    81     USE date_and_time_mod,                                                     &
    82         ONLY: day_of_year_init, time_utc_init
    83 
    8484    USE indices,                                                               &
    8585        ONLY:  nbgp, nzb, nzt, nysg, nyng, nxlg, nxrg
    8686
    87 
    8887    USE land_surface_model_mod,                                                &
    8988        ONLY:  lsm_energy_balance, lsm_soil_model, lsm_swap_timelevel
     89
    9090    USE pegrid
    9191
     
    9494
    9595    USE kinds
     96
     97    USE palm_date_time_mod,                                                    &
     98        ONLY:  get_date_time, seconds_per_hour
    9699
    97100    USE radiation_model_mod,                                                   &
     
    132135
    133136    INTEGER(iwp) :: current_timestep_number_spinup = 0  !< number if timestep during spinup
     137    INTEGER(iwp) :: day_of_year                         !< day of the year
    134138 
    135139    LOGICAL :: run_control_header_spinup = .FALSE.  !< flag parameter for steering whether the header information must be output
    136140
    137     REAL(wp) ::  pt_spinup   !< temporary storage of temperature
    138     REAL(wp) ::  dt_save     !< temporary storage for time step
     141    REAL(wp) ::  pt_spinup      !< temporary storage of temperature
     142    REAL(wp) ::  dt_save        !< temporary storage for time step
     143    REAL(wp) ::  second_of_day  !< second of the day
    139144                 
    140145    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  pt_save  !< temporary storage of temperature
     
    234239!--       shifted by one hour to simulate a lag between air temperature and
    235240!--       incoming radiation
     241          CALL get_date_time( simulated_time - spinup_time - seconds_per_hour, &
     242                              day_of_year=day_of_year,                         &
     243                              second_of_day=second_of_day                      )
     244
    236245          pt_spinup = spinup_pt_mean + spinup_pt_amplitude                     &
    237              * solar_angle (time_utc_init + time_since_reference_point - 3600.0)
     246                                     * solar_angle(day_of_year, second_of_day)
    238247
    239248!
     
    546555!-- Returns the cosine of the solar zenith angle at a given time. This routine
    547556!-- is similar to that for calculation zenith (see radiation_model_mod.f90)
    548     FUNCTION solar_angle( local_time )
     557    !> @todo Load function calc_zenith of radiation model instead of
     558    !>       rewrite the function here.
     559    FUNCTION solar_angle( day_of_year, second_of_day )
    549560
    550561       USE basic_constants_and_equations_mod,                                  &
     
    559570
    560571
    561        REAL(wp) ::  solar_angle     !< cosine of the solar zenith angle
    562 
    563        REAL(wp) ::  day             !< day of the year
    564        REAL(wp) ::  declination     !< solar declination angle
    565        REAL(wp) ::  hour_angle      !< solar hour angle
    566        REAL(wp) ::  time_utc        !< current time in UTC
    567        REAL(wp), INTENT(IN) :: local_time
    568 !
    569 !--    Calculate current day and time based on the initial values and simulation
    570 !--    time
    571 
    572        day = day_of_year_init + INT(FLOOR( local_time / 86400.0_wp ), KIND=iwp)
    573        time_utc = MOD(local_time, 86400.0_wp)
    574 
    575 
     572       INTEGER(iwp), INTENT(IN) ::  day_of_year  !< day of the year
     573
     574       REAL(wp)             ::  declination      !< solar declination angle
     575       REAL(wp)             ::  hour_angle       !< solar hour angle
     576       REAL(wp), INTENT(IN) ::  second_of_day    !< current time of the day in UTC
     577       REAL(wp)             ::  solar_angle      !< cosine of the solar zenith angle
    576578!
    577579!--    Calculate solar declination and hour angle   
    578        declination = ASIN( decl_1 * SIN(decl_2 * REAL(day, KIND=wp) - decl_3) )
    579        hour_angle  = 2.0_wp * pi * (time_utc / 86400.0_wp) + lon - pi
     580       declination = ASIN( decl_1 * SIN(decl_2 * REAL(day_of_year, KIND=wp) - decl_3) )
     581       hour_angle  = 2.0_wp * pi * (second_of_day / 86400.0_wp) + lon - pi
    580582
    581583!
     
    584586                     * COS(hour_angle)
    585587
    586 
    587588    END FUNCTION solar_angle
    588589
  • palm/trunk/SOURCE/urban_surface_mod.f90

    r4214 r4227  
    2828! -----------------
    2929! $Id$
     30! implement new palm_date_time_mod
     31!
     32! 4214 2019-09-02 15:57:02Z suehring
    3033! Bugfix, missing initialization and clearing of soil-moisture tendency
    3134! (J.Resler)
     
    222225        ONLY:  cpu_log, log_point, log_point_s
    223226
    224     USE date_and_time_mod,                                                     &
    225         ONLY:  time_utc_init
    226 
    227227    USE grid_variables,                                                        &
    228228        ONLY:  dx, dy, ddx, ddy, ddx2, ddy2
     
    236236    USE kinds
    237237             
     238    USE palm_date_time_mod,                                                    &
     239        ONLY:  get_date_time, seconds_per_hour
     240
    238241    USE pegrid
    239242       
     
    83058308!--        calculation of actual profile coefficient
    83068309!--        ??? check time_since_reference_point ???
    8307             dtime = mod(simulated_time + time_utc_init, 24.0_wp*3600.0_wp)
    8308             dhour = INT(dtime/3600.0_wp)
     8310            CALL get_date_time( time_since_reference_point, hour=dhour, second_of_day=dtime )
    83098311
    83108312!--         TO_DO: activate, if testcase is available
     
    83198321!--                    given to anthropogenic heat aheat*acoef (W*m-2)
    83208322!--                    linear interpolation of coeficient
    8321                         acoef = (REAL(dhour+1,wp)-dtime/3600.0_wp)*aheatprof(k,dhour) + &
    8322                                 (dtime/3600.0_wp-REAL(dhour,wp))*aheatprof(k,dhour+1)
     8323                        acoef = (REAL(dhour+1,wp)-dtime/seconds_per_hour)*aheatprof(k,dhour) + &
     8324                                (dtime/seconds_per_hour-REAL(dhour,wp))*aheatprof(k,dhour+1)
    83238325                        IF ( aheat(k,j,i) > 0.0_wp )  THEN
    83248326!
  • palm/trunk/SOURCE/write_restart_data_mod.f90

    r4182 r4227  
    2525! -----------------
    2626! $Id$
     27! implement new palm_date_time_mod and increased binary version
     28!
     29! 4146 2019-08-07 07:47:36Z gronemeier
    2730! Corrected "Former revisions" section
    2831!
     
    6770    USE control_parameters
    6871
    69     USE date_and_time_mod,                                                     &
    70         ONLY:  day_of_year_init, time_utc_init
    71 
    7272    USE grid_variables,                                                        &
    7373        ONLY:  dx, dy
     
    147147
    148148
    149        binary_version_global = '4.8'
     149       binary_version_global = '4.9'
    150150
    151151       CALL wrd_write_string( 'binary_version_global' )
     
    299299       WRITE ( 14 )  damp_level_1d
    300300
    301        CALL wrd_write_string( 'day_of_year_init' )
    302        WRITE ( 14 )  day_of_year_init
     301       CALL wrd_write_string( 'origin_date_time' )
     302       WRITE ( 14 )  origin_date_time
    303303
    304304       CALL wrd_write_string( 'dissipation_1d' )
     
    679679       WRITE ( 14 )  time_since_reference_point
    680680
    681        CALL wrd_write_string( 'time_utc_init' )
    682        WRITE ( 14 )  time_utc_init
    683 
    684681       CALL wrd_write_string( 'time_virtual_measurement' )
    685682       WRITE ( 14 )  time_virtual_measurement
Note: See TracChangeset for help on using the changeset viewer.