From 37363ad6efc536da25e415cbc7686f282aeb5582 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Thu, 16 Jul 2020 14:44:26 -0500 Subject: [PATCH 001/153] remove perf_mod dependancy --- datm/atm_comp_nuopc.F90 | 30 +++++++++++------------- dice/ice_comp_nuopc.F90 | 29 +++++++++++------------ dlnd/lnd_comp_nuopc.F90 | 27 ++++++++++------------ docn/ocn_comp_nuopc.F90 | 18 +++++++-------- drof/rof_comp_nuopc.F90 | 23 ++++++++---------- dshr/dshr_mod.F90 | 1 - dwav/wav_comp_nuopc.F90 | 29 +++++++++++------------ streams/dshr_methods_mod.F90 | 5 ++-- streams/dshr_strdata_mod.F90 | 45 ++++++++++++++++++------------------ 9 files changed, 96 insertions(+), 111 deletions(-) diff --git a/datm/atm_comp_nuopc.F90 b/datm/atm_comp_nuopc.F90 index f2ad7af19..a52fe9658 100644 --- a/datm/atm_comp_nuopc.F90 +++ b/datm/atm_comp_nuopc.F90 @@ -26,8 +26,6 @@ module atm_comp_nuopc use dshr_mod , only : dshr_orbital_init, dshr_orbital_update use dshr_dfield_mod , only : dfield_type, dshr_dfield_add, dshr_dfield_copy use dshr_fldlist_mod , only : fldlist_type, dshr_fldlist_add, dshr_fldlist_realize - use perf_mod , only : t_startf, t_stopf, t_barrierf - use datm_datamode_core2_mod , only : datm_datamode_core2_advertise use datm_datamode_core2_mod , only : datm_datamode_core2_init_pointers use datm_datamode_core2_mod , only : datm_datamode_core2_advance @@ -344,7 +342,7 @@ subroutine InitializeRealize(gcomp, importState, exportState, clock, rc) call ESMF_LogWrite(subname//' called', ESMF_LOGMSG_INFO) ! Initialize mesh, restart flag, compid, and logunit - call t_startf('datm_strdata_init') + call ESMF_TraceRegionEnter('datm_strdata_init') call dshr_mesh_init(gcomp, nullstr, logunit, 'ATM', nx_global, ny_global, & model_meshfile, model_maskfile, model_createmesh_fromfile, model_mesh, & model_mask, model_frac, restart_read, rc=rc) @@ -354,7 +352,7 @@ subroutine InitializeRealize(gcomp, importState, exportState, clock, rc) xmlfilename = 'datm.streams'//trim(inst_suffix)//'.xml' call shr_strdata_init_from_xml(sdat, xmlfilename, model_mesh, clock, 'ATM', logunit, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call t_stopf('datm_strdata_init') + call ESMF_TraceRegionExit('datm_strdata_init') ! NUOPC_Realize "realizes" a previously advertised field in the importState and exportState ! by replacing the advertised fields with the newly created fields of the same name. @@ -440,7 +438,7 @@ subroutine ModelAdvance(gcomp, rc) rc = ESMF_SUCCESS - call t_startf(subname) + call ESMF_TraceRegionEnter(subname) call memcheck(subname, 5, my_task==master_task) ! Query the Component for its clock, importState and exportState @@ -475,11 +473,11 @@ subroutine ModelAdvance(gcomp, rc) endif ! Run datm - call t_startf('datm_run') + call ESMF_TraceRegionEnter('datm_run') call datm_comp_run(importstate, exportstate, next_ymd, next_tod, mon, & orbEccen, orbMvelpp, orbLambm0, orbObliqr, restart_write, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call t_stopf('datm_run') + call ESMF_TraceRegionExit('datm_run') ! Update nextsw_cday for scalar data ! Use nextYMD and nextTOD here since since the component - clock is advance at the END of the time interval @@ -487,7 +485,7 @@ subroutine ModelAdvance(gcomp, rc) call dshr_state_SetScalar(nextsw_cday, flds_scalar_index_nextsw_cday, exportState, flds_scalar_name, flds_scalar_num, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call t_stopf(subname) + call ESMF_TraceRegionExit(subname) end subroutine ModelAdvance @@ -519,7 +517,7 @@ subroutine datm_comp_run(importState, exportState, target_ymd, target_tod, targe rc = ESMF_SUCCESS - call t_startf('DATM_RUN') + call ESMF_TraceRegionEnter('DATM_RUN') !-------------------- ! First time initialization @@ -574,21 +572,21 @@ subroutine datm_comp_run(importState, exportState, target_ymd, target_tod, targe ! time and spatially interpolate to model time and grid call t_barrierf('datm_BARRIER',mpicom) - call t_startf('datm_strdata_advance') + call ESMF_TraceRegionEnter('datm_strdata_advance') call shr_strdata_advance(sdat, target_ymd, target_tod, logunit, 'datm', rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call t_stopf('datm_strdata_advance') + call ESMF_TraceRegionExit('datm_strdata_advance') ! copy all fields from streams to export state as default ! This automatically will update the fields in the export state call t_barrierf('datm_comp_dfield_copy_BARRIER', mpicom) - call t_startf('datm_dfield_copy') + call ESMF_TraceRegionEnter('datm_dfield_copy') call dshr_dfield_copy(dfields, sdat, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call t_stopf('datm_dfield_copy') + call ESMF_TraceRegionExit('datm_dfield_copy') ! Determine data model behavior based on the mode - call t_startf('datm_datamode') + call ESMF_TraceRegionEnter('datm_datamode') select case (trim(datamode)) case('CORE2_NYF','CORE2_IAF') call datm_datamode_core2_advance(exportstate, datamode, target_ymd, target_tod, target_mon, & @@ -637,8 +635,8 @@ subroutine datm_comp_run(importState, exportState, target_ymd, target_tod, targe if (ChkErr(rc,__LINE__,u_FILE_u)) return end if - call t_stopf('datm_datamode') - call t_stopf('DATM_RUN') + call ESMF_TraceRegionExit('datm_datamode') + call ESMF_TraceRegionExit('DATM_RUN') !-------- contains diff --git a/dice/ice_comp_nuopc.F90 b/dice/ice_comp_nuopc.F90 index ce11df850..55df6a81c 100644 --- a/dice/ice_comp_nuopc.F90 +++ b/dice/ice_comp_nuopc.F90 @@ -23,7 +23,6 @@ module ice_comp_nuopc use dshr_strdata_mod , only : shr_strdata_type, shr_strdata_init_from_xml, shr_strdata_advance use dshr_dfield_mod , only : dfield_type, dshr_dfield_add, dshr_dfield_copy use dshr_fldlist_mod , only : fldlist_type, dshr_fldlist_add, dshr_fldlist_realize - use perf_mod , only : t_startf, t_stopf, t_adj_detailf, t_barrierf use dice_datamode_ssmi_mod , only : dice_datamode_ssmi_advertise use dice_datamode_ssmi_mod , only : dice_datamode_ssmi_init_pointers @@ -296,7 +295,7 @@ subroutine InitializeRealize(gcomp, importState, exportState, clock, rc) rc = ESMF_SUCCESS ! Initialize mesh, restart flag, logunit - call t_startf('dice_strdata_init') + call ESMF_TraceRegionEnter('dice_strdata_init') call dshr_mesh_init(gcomp, nullstr, logunit, 'ICE', nx_global, ny_global, & model_meshfile, model_maskfile, model_createmesh_fromfile, model_mesh, & model_mask, model_frac, restart_read, rc=rc) @@ -306,7 +305,7 @@ subroutine InitializeRealize(gcomp, importState, exportState, clock, rc) xmlfilename = 'dice.streams'//trim(inst_suffix)//'.xml' call shr_strdata_init_from_xml(sdat, xmlfilename, model_mesh, clock, 'ICE', logunit, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call t_stopf('dice_strdata_init') + call ESMF_TraceRegionExit('dice_strdata_init') ! NUOPC_Realize "realizes" a previously advertised field in the importState and exportState ! by replacing the advertised fields with the newly created fields of the same name. @@ -375,7 +374,7 @@ subroutine ModelAdvance(gcomp, rc) rc = ESMF_SUCCESS - call t_startf(subname) + call ESMF_TraceRegionEnter(subname) call memcheck(subname, 5, my_task == master_task) ! Query the Component for its clock, importState and exportState @@ -413,7 +412,7 @@ subroutine ModelAdvance(gcomp, rc) call dice_comp_run(importState, exportState, next_ymd, next_tod, cosarg, restart_write, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call t_stopf(subname) + call ESMF_TraceRegionExit(subname) end subroutine ModelAdvance @@ -440,7 +439,7 @@ subroutine dice_comp_run(importstate, exportstate, target_ymd, target_tod, cosar rc = ESMF_SUCCESS - call t_startf('DICE_RUN') + call ESMF_TraceRegionEnter('DICE_RUN') !-------------------- ! first time initialization @@ -477,27 +476,27 @@ subroutine dice_comp_run(importstate, exportstate, target_ymd, target_tod, cosar !-------------------- ! time and spatially interpolate to model time and grid - call t_barrierf('dice_BARRIER',mpicom) - call t_startf('dice_strdata_advance') + + call ESMF_TraceRegionEnter('dice_strdata_advance') call shr_strdata_advance(sdat, target_ymd, target_tod, logunit, 'dice', rc=rc) - call t_stopf('dice_strdata_advance') + call ESMF_TraceRegionExit('dice_strdata_advance') !-------------------- ! copy all fields from streams to export state as default !-------------------- ! This automatically will update the fields in the export state - call t_barrierf('dice_comp_dfield_copy_BARRIER', mpicom) - call t_startf('dice_dfield_copy') + + call ESMF_TraceRegionEnter('dice_dfield_copy') call dshr_dfield_copy(dfields, sdat, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call t_stopf('dice_dfield_copy') + call ESMF_TraceRegionExit('dice_dfield_copy') !------------------------------------------------- ! Determine data model behavior based on the mode !------------------------------------------------- - call t_startf('dice_datamode') + call ESMF_TraceRegionEnter('dice_datamode') ! Perform data mode specific calculations select case (trim(datamode)) @@ -523,8 +522,8 @@ subroutine dice_comp_run(importstate, exportstate, target_ymd, target_tod, cosar if (ChkErr(rc,__LINE__,u_FILE_u)) return end if - call t_stopf('dice_datamode') - call t_stopf('DICE_RUN') + call ESMF_TraceRegionExit('dice_datamode') + call ESMF_TraceRegionExit('DICE_RUN') end subroutine dice_comp_run diff --git a/dlnd/lnd_comp_nuopc.F90 b/dlnd/lnd_comp_nuopc.F90 index 6d86145df..1354b3d11 100644 --- a/dlnd/lnd_comp_nuopc.F90 +++ b/dlnd/lnd_comp_nuopc.F90 @@ -25,7 +25,6 @@ module lnd_comp_nuopc use dshr_dfield_mod , only : dfield_type, dshr_dfield_add, dshr_dfield_copy use dshr_fldlist_mod , only : fldlist_type, dshr_fldlist_add, dshr_fldlist_realize use glc_elevclass_mod , only : glc_elevclass_as_string, glc_elevclass_init - use perf_mod , only : t_startf, t_stopf, t_adj_detailf, t_barrierf implicit none private ! except @@ -279,7 +278,7 @@ subroutine InitializeRealize(gcomp, importState, exportState, clock, rc) rc = ESMF_SUCCESS ! Initialize sdat - call t_startf('dlnd_strdata_init') + call ESMF_TraceRegionEnter('dlnd_strdata_init') call dshr_mesh_init(gcomp, nullstr, logunit, 'LND', nx_global, ny_global, & model_meshfile, model_maskfile, model_createmesh_fromfile, model_mesh, & model_mask, model_frac, restart_read, rc=rc) @@ -288,7 +287,7 @@ subroutine InitializeRealize(gcomp, importState, exportState, clock, rc) xmlfilename = 'dlnd.streams'//trim(inst_suffix)//'.xml' call shr_strdata_init_from_xml(sdat, xmlfilename, model_mesh, clock, 'LND', logunit, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call t_stopf('dlnd_strdata_init') + call ESMF_TraceRegionExit('dlnd_strdata_init') ! Realize the actively coupled fields, now that a mesh is established and ! initialize dfields data type (to map streams to export state fields) @@ -376,10 +375,10 @@ subroutine ModelAdvance(gcomp, rc) call ESMF_AlarmRingerOff( alarm, rc=rc ) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call t_startf('dlnd_restart') + call ESMF_TraceRegionEnter('dlnd_restart') call dshr_restart_write(rpfile, case_name, 'dlnd', inst_suffix, next_ymd, next_tod, & logunit, mpicom, my_task, sdat) - call t_stopf('dlnd_restart') + call ESMF_TraceRegionExit('dlnd_restart') endif ! write diagnostics @@ -512,7 +511,7 @@ subroutine dlnd_comp_run(importState, exportState, target_ymd, target_tod, rc) rc = ESMF_SUCCESS - call t_startf('DLND_RUN') + call ESMF_TraceRegionEnter('DLND_RUN') !-------------------- ! set module pointers @@ -561,29 +560,27 @@ subroutine dlnd_comp_run(importState, exportState, target_ymd, target_tod, rc) !-------------------- ! time and spatially interpolate to model time and grid - call t_barrierf('dlnd_BARRIER',mpicom) - call t_startf('dlnd_strdata_advance') + call ESMF_TraceRegionEnter('dlnd_strdata_advance') call shr_strdata_advance(sdat, target_ymd, target_tod, logunit, 'dlnd', rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call t_stopf('dlnd_strdata_advance') + call ESMF_TraceRegionExit('dlnd_strdata_advance') ! copy all fields from streams to export state as default ! This automatically will update the fields in the export state - call t_barrierf('dlnd_comp_strdata_copy_BARRIER', mpicom) - call t_startf('dlnd_strdata_copy') + call ESMF_TraceRegionEnter('dlnd_strdata_copy') call dshr_dfield_copy(dfields, sdat, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call t_stopf('dlnd_strdata_copy') + call ESMF_TraceRegionExit('dlnd_strdata_copy') ! determine data model behavior based on the mode - call t_startf('dlnd_datamode') + call ESMF_TraceRegionEnter('dlnd_datamode') select case (trim(datamode)) case('copyall') ! do nothing extra end select - call t_stopf('dlnd_datamode') - call t_stopf('DLND_RUN') + call ESMF_TraceRegionExit('dlnd_datamode') + call ESMF_TraceRegionExit('DLND_RUN') end subroutine dlnd_comp_run diff --git a/docn/ocn_comp_nuopc.F90 b/docn/ocn_comp_nuopc.F90 index 1236b056d..81c531c88 100644 --- a/docn/ocn_comp_nuopc.F90 +++ b/docn/ocn_comp_nuopc.F90 @@ -22,8 +22,6 @@ module ocn_comp_nuopc use dshr_mod , only : dshr_state_setscalar, dshr_set_runclock use dshr_dfield_mod , only : dfield_type, dshr_dfield_add, dshr_dfield_copy use dshr_fldlist_mod , only : fldlist_type, dshr_fldlist_realize - use perf_mod , only : t_startf, t_stopf, t_adj_detailf, t_barrierf - use pio ! Datamode specialized modules use docn_datamode_copyall_mod , only : docn_datamode_copyall_advertise @@ -324,7 +322,7 @@ subroutine InitializeRealize(gcomp, importState, exportState, clock, rc) rc = ESMF_SUCCESS ! Initialize model mesh, restart flag, logunit, model_mask and model_frac - call t_startf('docn_strdata_init') + call ESMF_TraceRegionEnter('docn_strdata_init') call dshr_mesh_init(gcomp, nullstr, logunit, 'OCN', nx_global, ny_global, & model_meshfile, model_maskfile, model_createmesh_fromfile, model_mesh, & model_mask, model_frac, restart_read, rc=rc) @@ -336,7 +334,7 @@ subroutine InitializeRealize(gcomp, importState, exportState, clock, rc) call shr_strdata_init_from_xml(sdat, xmlfilename, model_mesh, clock, 'OCN', logunit, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return end if - call t_stopf('docn_strdata_init') + call ESMF_TraceRegionExit('docn_strdata_init') ! Realize the actively coupled fields, now that a mesh is established and ! NUOPC_Realize "realizes" a previously advertised field in the importState and exportState @@ -447,7 +445,7 @@ subroutine docn_comp_run(importState, exportState, clock, target_ymd, target_tod rc = ESMF_SUCCESS - call t_startf('DOCN_RUN') + call ESMF_TraceRegionEnter('DOCN_RUN') !-------------------- ! First time initialization @@ -497,20 +495,20 @@ subroutine docn_comp_run(importState, exportState, clock, target_ymd, target_tod ! Advance data model streams - time and spatially interpolate to model time and grid call t_barrierf('docn_BARRIER',mpicom) - call t_startf('docn_strdata_advance') + call ESMF_TraceRegionEnter('docn_strdata_advance') call shr_strdata_advance(sdat, target_ymd, target_tod, logunit, 'docn', rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call t_stopf('docn_strdata_advance') + call ESMF_TraceRegionExit('docn_strdata_advance') ! Copy all fields from streams to export state as default ! This automatically will update the fields in the export state call t_barrierf('docn_dfield_copy_BARRIER', mpicom) - call t_startf('docn_dfield_copy') + call ESMF_TraceRegionEnter('docn_dfield_copy') if(.not. aquaplanet) then call dshr_dfield_copy(dfields, sdat, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return endif - call t_stopf('docn_dfield_copy') + call ESMF_TraceRegionExit('docn_dfield_copy') ! Perform data mode specific calculations select case (trim(datamode)) @@ -546,7 +544,7 @@ subroutine docn_comp_run(importState, exportState, clock, target_ymd, target_tod end select end if - call t_stopf('DOCN_RUN') + call ESMF_TraceRegionExit('DOCN_RUN') ! write diagnostics if (diagnose_data) then diff --git a/drof/rof_comp_nuopc.F90 b/drof/rof_comp_nuopc.F90 index e4963cd7f..0765c10a9 100644 --- a/drof/rof_comp_nuopc.F90 +++ b/drof/rof_comp_nuopc.F90 @@ -25,7 +25,6 @@ module rof_comp_nuopc use dshr_mod , only : dshr_restart_read, dshr_restart_write, dshr_mesh_init use dshr_dfield_mod , only : dfield_type, dshr_dfield_add, dshr_dfield_copy use dshr_fldlist_mod , only : fldlist_type, dshr_fldlist_add, dshr_fldlist_realize - use perf_mod , only : t_startf, t_stopf, t_adj_detailf, t_barrierf implicit none private ! except @@ -277,7 +276,7 @@ subroutine InitializeRealize(gcomp, importState, exportState, clock, rc) rc = ESMF_SUCCESS ! Initialize mesh, restart flag, logunit - call t_startf('drof_strdata_init') + call ESMF_TraceRegionEnter('drof_strdata_init') call dshr_mesh_init(gcomp, nullstr, logunit, 'ROF', nx_global, ny_global, & model_meshfile, model_maskfile, model_createmesh_fromfile, model_mesh, & model_mask, model_frac, restart_read, rc=rc) @@ -287,7 +286,7 @@ subroutine InitializeRealize(gcomp, importState, exportState, clock, rc) xmlfilename = 'drof.streams'//trim(inst_suffix)//'.xml' call shr_strdata_init_from_xml(sdat, xmlfilename, model_mesh, clock, 'ROF', logunit, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call t_stopf('drof_strdata_init') + call ESMF_TraceRegionExit('drof_strdata_init') ! NUOPC_Realize "realizes" a previously advertised field in the importState and exportState ! by replacing the advertised fields with the newly created fields of the same name. @@ -392,7 +391,7 @@ subroutine drof_comp_run(exportState, target_ymd, target_tod, restart_write, rc) character(*), parameter :: subName = "(drof_comp_run) " !------------------------------------------------------------------------------- - call t_startf('DROF_RUN') + call ESMF_TraceRegionEnter('DROF_RUN') !-------------------- ! First time initialization @@ -424,21 +423,19 @@ subroutine drof_comp_run(exportState, target_ymd, target_tod, restart_write, rc) !-------------------- ! time and spatially interpolate to model time and grid - call t_barrierf('drof_BARRIER',mpicom) - call t_startf('drof_strdata_advance') + call ESMF_TraceRegionEnter('drof_strdata_advance') call shr_strdata_advance(sdat, target_ymd, target_tod, logunit, 'drof', rc=rc) - call t_stopf('drof_strdata_advance') + call ESMF_TraceRegionExit('drof_strdata_advance') ! copy all fields from streams to export state as default ! This automatically will update the fields in the export state - call t_barrierf('drof_comp_dfield_copy_BARRIER', mpicom) - call t_startf('drof_dfield_copy') + call ESMF_TraceRegionEnter('drof_dfield_copy') call dshr_dfield_copy(dfields, sdat, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call t_stopf('drof_dfield_copy') + call ESMF_TraceRegionExit('drof_dfield_copy') ! determine data model behavior based on the mode - call t_startf('drof_datamode') + call ESMF_TraceRegionEnter('drof_datamode') select case (trim(datamode)) case('copyall') ! zero out "special values" of export fields @@ -463,8 +460,8 @@ subroutine drof_comp_run(exportState, target_ymd, target_tod, restart_write, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return end if - call t_stopf('drof_datamode') - call t_stopf('DROF_RUN') + call ESMF_TraceRegionExit('drof_datamode') + call ESMF_TraceRegionExit('DROF_RUN') end subroutine drof_comp_run diff --git a/dshr/dshr_mod.F90 b/dshr/dshr_mod.F90 index 814c467d9..58e32d04f 100644 --- a/dshr/dshr_mod.F90 +++ b/dshr/dshr_mod.F90 @@ -40,7 +40,6 @@ module dshr_mod use shr_pio_mod , only : shr_pio_getiosys, shr_pio_getiotype, shr_pio_getioformat use dshr_strdata_mod , only : shr_strdata_type, shr_strdata_init_from_xml, SHR_STRDATA_GET_STREAM_COUNT use dshr_methods_mod , only : chkerr - use perf_mod , only : t_startf, t_stopf use pio implicit none diff --git a/dwav/wav_comp_nuopc.F90 b/dwav/wav_comp_nuopc.F90 index b9999b94b..2a39fdd63 100644 --- a/dwav/wav_comp_nuopc.F90 +++ b/dwav/wav_comp_nuopc.F90 @@ -24,7 +24,6 @@ module wav_comp_nuopc use dshr_mod , only : dshr_restart_read, dshr_restart_write, dshr_mesh_init use dshr_dfield_mod , only : dfield_type, dshr_dfield_add, dshr_dfield_copy use dshr_fldlist_mod , only : fldlist_type, dshr_fldlist_add, dshr_fldlist_realize - use perf_mod , only : t_startf, t_stopf, t_adj_detailf, t_barrierf implicit none private ! except @@ -264,7 +263,7 @@ subroutine InitializeRealize(gcomp, importState, exportState, clock, rc) rc = ESMF_SUCCESS ! Initialize sdat - create the model domain mesh and intialize the sdat clock - call t_startf('dwav_strdata_init') + call ESMF_TraceRegionEnter('dwav_strdata_init') call dshr_mesh_init(gcomp, nullstr, logunit, 'WAV', nx_global, ny_global, & model_meshfile, model_maskfile, model_createmesh_fromfile, model_mesh, & model_mask, model_frac, restart_read, rc=rc) @@ -274,7 +273,7 @@ subroutine InitializeRealize(gcomp, importState, exportState, clock, rc) xmlfilename = 'dwav.streams'//trim(inst_suffix)//'.xml' call shr_strdata_init_from_xml(sdat, xmlfilename, model_mesh, clock, 'WAV', logunit, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call t_stopf('dwav_strdata_init') + call ESMF_TraceRegionExit('dwav_strdata_init') ! Realize the actively coupled fields, now that a mesh is established and ! initialize dfields data type (to map streams to export state fields) @@ -328,7 +327,7 @@ subroutine ModelAdvance(gcomp, rc) rc = ESMF_SUCCESS - call t_startf(subname) + call ESMF_TraceRegionEnter(subname) call memcheck(subname, 5, my_task == master_task) ! query the Component for its clock, importState and exportState @@ -357,13 +356,13 @@ subroutine ModelAdvance(gcomp, rc) call ESMF_AlarmRingerOff( alarm, rc=rc ) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call t_startf('dwav_restart') + call ESMF_TraceRegionEnter('dwav_restart') call NUOPC_CompAttributeGet(gcomp, name='case_name', value=case_name, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return call dshr_restart_write(rpfile, case_name, 'dwav', inst_suffix, next_ymd, next_tod, & logunit, mpicom, my_task, sdat) - call t_stopf('dwav_restart') + call ESMF_TraceRegionExit('dwav_restart') endif ! Write Diagnostics @@ -372,7 +371,7 @@ subroutine ModelAdvance(gcomp, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return end if - call t_stopf(subname) + call ESMF_TraceRegionExit(subname) end subroutine ModelAdvance @@ -484,7 +483,7 @@ subroutine dwav_comp_run(mpicom, my_task, logunit, target_ymd, target_tod, sdat, integer , intent(out) :: rc !------------------------------------------------------------------------------- - call t_startf('DWAV_RUN') + call ESMF_TraceRegionEnter('DWAV_RUN') !-------------------- ! advance dwav streams @@ -492,9 +491,9 @@ subroutine dwav_comp_run(mpicom, my_task, logunit, target_ymd, target_tod, sdat, ! time and spatially interpolate to model time and grid call t_barrierf('dwav_BARRIER',mpicom) - call t_startf('dwav_strdata_advance') + call ESMF_TraceRegionEnter('dwav_strdata_advance') call shr_strdata_advance(sdat, target_ymd, target_tod, logunit, 'dwav', rc=rc) - call t_stopf('dwav_strdata_advance') + call ESMF_TraceRegionExit('dwav_strdata_advance') !-------------------- ! copy all fields from streams to export state as default @@ -502,23 +501,23 @@ subroutine dwav_comp_run(mpicom, my_task, logunit, target_ymd, target_tod, sdat, ! This automatically will update the fields in the export state call t_barrierf('dwav_comp_strdata_copy_BARRIER', mpicom) - call t_startf('dwav_strdata_copy') + call ESMF_TraceRegionEnter('dwav_strdata_copy') call dshr_dfield_copy(dfields, sdat, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call t_stopf('dwav_strdata_copy') + call ESMF_TraceRegionExit('dwav_strdata_copy') !------------------------------------------------- ! determine data model behavior based on the mode !------------------------------------------------- - call t_startf('dwav_datamode') + call ESMF_TraceRegionEnter('dwav_datamode') select case (trim(datamode)) case('copyall') ! do nothing end select - call t_stopf('dwav_datamode') + call ESMF_TraceRegionExit('dwav_datamode') - call t_stopf('DWAV_RUN') + call ESMF_TraceRegionExit('DWAV_RUN') end subroutine dwav_comp_run diff --git a/streams/dshr_methods_mod.F90 b/streams/dshr_methods_mod.F90 index 861fc1093..08ab93a0b 100644 --- a/streams/dshr_methods_mod.F90 +++ b/streams/dshr_methods_mod.F90 @@ -4,7 +4,6 @@ module dshr_methods_mod use ESMF use shr_kind_mod , only : r8=>shr_kind_r8, cs=>shr_kind_cs, cl=>shr_kind_cl - use perf_mod , only : t_startf, t_stopf, t_adj_detailf, t_barrierf implicit none public @@ -192,7 +191,7 @@ subroutine dshr_fldbun_regrid(FBsrc, FBdst, RH, zeroregion, rc) rc = ESMF_SUCCESS - call t_startf(subname) + call ESMF_TraceRegionEnter(subname) localzr = ESMF_REGION_TOTAL if (present(zeroregion)) then @@ -235,7 +234,7 @@ subroutine dshr_fldbun_regrid(FBsrc, FBdst, RH, zeroregion, rc) deallocate(lfieldnamelist_src) deallocate(lfieldnamelist_dst) - call t_stopf(subname) + call ESMF_TraceRegionExit(subname) end subroutine dshr_fldbun_regrid diff --git a/streams/dshr_strdata_mod.F90 b/streams/dshr_strdata_mod.F90 index 7821351f0..9b069c8a7 100644 --- a/streams/dshr_strdata_mod.F90 +++ b/streams/dshr_strdata_mod.F90 @@ -33,7 +33,6 @@ module dshr_strdata_mod use pio , only : pio_double, pio_real, pio_int, pio_offset_kind, pio_get_var use pio , only : pio_read_darray, pio_setframe, pio_fill_double, pio_get_att use pio , only : PIO_BCAST_ERROR, PIO_RETURN_ERROR, PIO_NOERR, PIO_INTERNAL_ERROR, PIO_SHORT - use perf_mod , only : t_startf, t_stopf, t_adj_detailf implicit none private @@ -735,7 +734,7 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) if (.not.ltimers) call t_adj_detailf(tadj) - call t_startf(trim(lstr)//trim(timname)//'_total') + call ESMF_TraceRegionEnter(trim(lstr)//trim(timname)//'_total') sdat%ymd = ymd sdat%tod = tod @@ -776,7 +775,7 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) ! fldbun_stream_ub to fldbun_stream_lb and read in new fldbun_stream_ub data ! --------------------------------------------------------- - call t_startf(trim(lstr)//trim(timname)//'_readLBUB') + call ESMF_TraceRegionEnter(trim(lstr)//trim(timname)//'_readLBUB') select case(sdat%stream(ns)%readmode) case ('single') @@ -827,7 +826,7 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) endif endif - call t_stopf(trim(lstr)//trim(timname)//'_readLBUB') + call ESMF_TraceRegionExit(trim(lstr)//trim(timname)//'_readLBUB') enddo ! end of loop over streams @@ -843,19 +842,19 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) ! time interpolation method is coszen ! ------------------------------------------ - call t_startf(trim(lstr)//trim(timname)//'_coszen') + call ESMF_TraceRegionEnter(trim(lstr)//trim(timname)//'_coszen') allocate(coszen(sdat%model_lsize)) ! get coszen - call t_startf(trim(lstr)//trim(timname)//'_coszenC') + call ESMF_TraceRegionEnter(trim(lstr)//trim(timname)//'_coszenC') call shr_tInterp_getCosz(coszen, sdat%model_lon, sdat%model_lat, ymdmod(ns), todmod, & sdat%eccen, sdat%mvelpp, sdat%lambm0, sdat%obliqr, sdat%stream(ns)%calendar) - call t_stopf(trim(lstr)//trim(timname)//'_coszenC') + call ESMF_TraceRegionExit(trim(lstr)//trim(timname)//'_coszenC') ! get avg cosz factor if (newdata(ns)) then ! compute a new avg cosz - call t_startf(trim(lstr)//trim(timname)//'_coszenN') + call ESMF_TraceRegionEnter(trim(lstr)//trim(timname)//'_coszenN') if (.not. allocated(sdat%tavCoszen)) then allocate(sdat%tavCoszen(sdat%model_lsize)) end if @@ -863,7 +862,7 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) sdat%pstrm(ns)%ymdLB, sdat%pstrm(ns)%todLB, sdat%pstrm(ns)%ymdUB, sdat%pstrm(ns)%todUB, & sdat%eccen, sdat%mvelpp, sdat%lambm0, sdat%obliqr, sdat%modeldt, & sdat%stream(ns)%calendar, rc=rc) - call t_stopf(trim(lstr)//trim(timname)//'_coszenN') + call ESMF_TraceRegionExit(trim(lstr)//trim(timname)//'_coszenN') endif ! compute time interperpolate value - LB data normalized with this factor: cosz/tavCosz @@ -884,7 +883,7 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) end do deallocate(coszen) - call t_stopf(trim(lstr)//trim(timname)//'_coszen') + call ESMF_TraceRegionExit(trim(lstr)//trim(timname)//'_coszen') elseif (trim(sdat%stream(ns)%tinterpalgo) /= trim(shr_strdata_nullstr)) then @@ -892,7 +891,7 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) ! time interpolation method is not coszen ! ------------------------------------------ - call t_startf(trim(lstr)//trim(timname)//'_tint') + call ESMF_TraceRegionEnter(trim(lstr)//trim(timname)//'_tint') call shr_tInterp_getFactors(sdat%pstrm(ns)%ymdlb, sdat%pstrm(ns)%todlb, & sdat%pstrm(ns)%ymdub, sdat%pstrm(ns)%todub, & ymdmod(ns), todmod, flb, fub, calendar=sdat%stream(ns)%calendar, logunit=sdat%logunit, & @@ -914,7 +913,7 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return dataptr(:) = dataptr_lb(:) * flb + dataptr_ub(:) * fub end do - call t_stopf(trim(lstr)//trim(timname)//'_tint') + call ESMF_TraceRegionExit(trim(lstr)//trim(timname)//'_tint') else @@ -922,13 +921,13 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) ! zero out stream data for this field ! ------------------------------------------ - call t_startf(trim(lstr)//trim(timname)//'_zero') + call ESMF_TraceRegionEnter(trim(lstr)//trim(timname)//'_zero') do nf = 1,size(sdat%pstrm(ns)%fldlist_model) call dshr_fldbun_getfldptr(sdat%pstrm(ns)%fldbun_model, sdat%pstrm(ns)%fldlist_model(nf), dataptr, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return dataptr(:) = 0._r8 end do - call t_stopf(trim(lstr)//trim(timname)//'_zero') + call ESMF_TraceRegionExit(trim(lstr)//trim(timname)//'_zero') endif @@ -939,7 +938,7 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) endif ! nstreams > 0 - call t_stopf(trim(lstr)//trim(timname)//'_total') + call ESMF_TraceRegionExit(trim(lstr)//trim(timname)//'_total') if (.not.ltimers) call t_adj_detailf(-tadj) end subroutine shr_strdata_advance @@ -1059,7 +1058,7 @@ subroutine shr_strdata_readLBUB(sdat, ns, mDate, mSec, newData, istr, rc) stream => sdat%stream(ns) stream_mesh => sdat%pstrm(ns)%stream_mesh - call t_startf(trim(istr)//'_setup') + call ESMF_TraceRegionEnter(trim(istr)//'_setup') ! allocate streamdat instance on all tasks call ESMF_VMGetCurrent(vm, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return @@ -1081,15 +1080,15 @@ subroutine shr_strdata_readLBUB(sdat, ns, mDate, mSec, newData, istr, rc) rDateLB = real(sdat%pstrm(ns)%ymdLB,r8) + real(sdat%pstrm(ns)%todLB,r8)/shr_const_cday rDateUB = real(sdat%pstrm(ns)%ymdUB,r8) + real(sdat%pstrm(ns)%todUB,r8)/shr_const_cday - call t_stopf(trim(istr)//'_setup') + call ESMF_TraceRegionExit(trim(istr)//'_setup') ! if model current date is outside of model lower or upper bound - find the stream bounds if (rDateM < rDateLB .or. rDateM > rDateUB) then - call t_startf(trim(istr)//'_fbound') + call ESMF_TraceRegionEnter(trim(istr)//'_fbound') call shr_stream_findBounds(stream, mDate, mSec, & sdat%pstrm(ns)%ymdLB, dDateLB, sdat%pstrm(ns)%todLB, n_lb, filename_lb, & sdat%pstrm(ns)%ymdUB, dDateUB, sdat%pstrm(ns)%todUB, n_ub, filename_ub) - call t_stopf(trim(istr)//'_fbound') + call ESMF_TraceRegionExit(trim(istr)//'_fbound') endif ! determine if need to read in new stream data @@ -1122,7 +1121,7 @@ subroutine shr_strdata_readLBUB(sdat, ns, mDate, mSec, newData, istr, rc) endif ! determine previous & next data files in list of files - call t_startf(trim(istr)//'_filemgt') + call ESMF_TraceRegionEnter(trim(istr)//'_filemgt') if (sdat%masterproc .and. newdata) then call shr_stream_getPrevFileName(stream, filename_lb, filename_prev) call shr_stream_getNextFileName(stream, filename_ub, filename_next) @@ -1131,7 +1130,7 @@ subroutine shr_strdata_readLBUB(sdat, ns, mDate, mSec, newData, istr, rc) ! do nothing end if endif - call t_stopf(trim(istr)//'_filemgt') + call ESMF_TraceRegionExit(trim(istr)//'_filemgt') end subroutine shr_strdata_readLBUB @@ -1246,7 +1245,7 @@ subroutine shr_strdata_readstrm(sdat, ns, stream, stream_mesh, & ! the data for fldbun_stream with the field names fldname_stream_model ! ****************************************************************************** - call t_startf(trim(istr)//'_readpio') + call ESMF_TraceRegionEnter(trim(istr)//'_readpio') if (sdat%masterproc) then write(sdat%logunit,F02) 'file ' // trim(boundstr) //': ',trim(filename), nt endif @@ -1433,7 +1432,7 @@ subroutine shr_strdata_readstrm(sdat, ns, stream, stream_mesh, & if(.not. pio_iodesc_set) then deallocate(dataptr) endif - call t_stopf(trim(istr)//'_readpio') + call ESMF_TraceRegionExit(trim(istr)//'_readpio') end subroutine shr_strdata_readstrm From 06a00b9fc04c4f99afa9db6cb795aaccf4064a25 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Thu, 16 Jul 2020 17:11:15 -0500 Subject: [PATCH 002/153] not yet working --- CMakeLists.txt | 2 + cmake/FindFoX.cmake | 40 ++++++ cmake/FindPIO.cmake | 103 +++++++++++++ cmake/LibCheck.cmake | 104 ++++++++++++++ cmake/LibFind.cmake | 333 +++++++++++++++++++++++++++++++++++++++++++ share/CMakeLists.txt | 3 +- 6 files changed, 584 insertions(+), 1 deletion(-) create mode 100644 cmake/FindFoX.cmake create mode 100644 cmake/FindPIO.cmake create mode 100644 cmake/LibCheck.cmake create mode 100644 cmake/LibFind.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index d3b12130f..5a308e0ef 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,8 @@ project(NUOPC_DATA_MODELS LANGUAGES Fortran VERSION 0.1) list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) include(ExternalProject) find_package(ESMF REQUIRED) +find_package(PIO REQUIRED) +find_package(FoX REQUIRED) if (DEFINED CIMEROOT) message("Using CIME in ${CIMEROOT} with compiler ${COMPILER}") diff --git a/cmake/FindFoX.cmake b/cmake/FindFoX.cmake new file mode 100644 index 000000000..f26b7b3e4 --- /dev/null +++ b/cmake/FindFoX.cmake @@ -0,0 +1,40 @@ +# - Try to find FoX +# +# This can be controled by setting FoX_PATH or FoX__PATH Cmake variables, +# where is the COMPONENT language one needs. +# +# Once done, this will define: +# +# FoX__FOUND (BOOL) - system has FoX +# FoX__IS_SHARED (BOOL) - whether the library is shared/dynamic +# FoX__INCLUDE_DIR (PATH) - Location of the header files and modules +# FoX__LIBRARY (File) - Path to the library files +# FoX__LIBRARIES (List) - link these to use FoX +# +# Available COMPONENTS are: Fortran +# +include (LibFind) +include (LibCheck) + +# Define FoX Fortran Component +define_package_component(FoX DEFAULT + COMPONENT Fortran + INCLUDE_NAMES fox_common.mod + LIBRARY_NAMES FoX_common) + +# Search for list of valid components requested +find_valid_components(FoX) + +#============================================================================== +# SEARCH FOR VALIDATED COMPONENTS +foreach (pcomp IN LISTS FoX_FIND_VALID_COMPONENTS) + set(FoX_Fortran_INCLUDE_DIR $ENV{FoX}/finclude) + set(FoX_Fortran_LIBRARY $ENV{FoX}/lib) + initialize_paths(FoX_${pcomp}_PATHS + INCLUDE_DIRECTORIES $ENV{FoX}/finclude + LIBRARIES $ENV{FoX}/lib) + find_package_component(FoX COMPONENT ${pcomp}) +endforeach () +if(FoX_Fortran_FOUND) +message(" Found FoX:") +endif() \ No newline at end of file diff --git a/cmake/FindPIO.cmake b/cmake/FindPIO.cmake new file mode 100644 index 000000000..d2761d20c --- /dev/null +++ b/cmake/FindPIO.cmake @@ -0,0 +1,103 @@ +# - Try to find PIO +# +# This can be controled by setting PIO_PATH or PIO__PATH Cmake variables, +# where is the COMPONENT language one needs. +# +# Once done, this will define: +# +# PIO__FOUND (BOOL) - system has PIO +# PIO__IS_SHARED (BOOL) - whether the library is shared/dynamic +# PIO__INCLUDE_DIR (PATH) - Location of the header files and modules +# PIO__LIBRARY (File) - Path to the library files +# PIO__LIBRARIES (List) - link these to use PIO +# +# Available COMPONENTS are: C Fortran +# If no components are specified only C is assumed +include (LibFind) +include (LibCheck) + +# Define PIO C Component +define_package_component(PIO DEFAULT + COMPONENT C + INCLUDE_NAMES pio.h + LIBRARY_NAMES pioc) + +# Define PIO Fortran Component +define_package_component(PIO + Component Fortran + INCLUDE_NAMES pio.mod pio.inc + LIBRARY_NAMES piof) + +# Search for list of valid components requested +find_valid_components(PIO) + +#============================================================================== +# SEARCH FOR VALIDATED COMPONENTS +foreach (pcomp IN LISTS PIO_FIND_VALID_COMPONENTS) + + # If not found already, search... + if (NOT PIO_${pcomp}_FOUND) + + # Manually add the MPI include and library dirs to search paths + # and search for the package component + if (MPI_${pcomp}_FOUND) + initialize_paths (PIO_${pcomp}_PATHS + INCLUDE_DIRECTORIES ${MPI_${pcomp}_INCLUDE_PATH} + LIBRARIES ${MPI_${pcomp}_LIBRARIES}) + find_package_component(PIO COMPONENT ${pcomp} + PATHS ${PIO_${pcomp}_PATHS}) + else () + find_package_component(PIO COMPONENT ${pcomp}) + endif () + + # Continue only if component found + if (PIO_${pcomp}_FOUND) + + # Checks + if (pcomp STREQUAL C) + + # Check version + check_version (PIO + NAME "pio_meta.h" + HINTS ${PIO_C_INCLUDE_DIRS} + MACRO_REGEX "PIO_VERSION_") + + endif () + + # Dependencies + if (pcomp STREQUAL C AND NOT PIO_C_IS_SHARED) + + # DEPENDENCY: PnetCDF (if PnetCDF enabled) + check_macro (PIO_HAS_PNETCDF + NAME TryPIO_PNETCDF.c + HINTS ${CMAKE_MODULE_PATH} + DEFINITIONS -I${PIO_C_INCLUDE_DIR} + COMMENT "whether PIO has PnetCDF support") + if (PIO_HAS_PNETCDF) + find_package (PnetCDF COMPONENTS C) + endif () + + + elseif (pcomp STREQUAL Fortran AND NOT PIO_Fortran_IS_SHARED) + + # DEPENDENCY: PIO + set (orig_comp ${pcomp}) + set (orig_comps ${PIO_FIND_VALID_COMPONENTS}) + find_package (PIO COMPONENTS C) + set (PIO_FIND_VALID_COMPONENTS ${orig_comps}) + set (pcomp ${orig_comp}) + if (PIO_C_FOUND) + list (APPEND PIO_Fortran_INCLUDE_DIRS ${PIO_C_INCLUDE_DIRS}) + list (APPEND PIO_Fortran_LIBRARIES ${PIO_C_LIBRARIES}) + endif () + + endif () + + endif () + + endif () + +endforeach () +message("PIO_C_FOUND ${PIO_C_FOUND}") +message("PIO_Fortran_FOUND ${PIO_Fortran_FOUND}") +message("PIO_INCLUDE_DIR ${PIO_INCLUDE_DIR}") diff --git a/cmake/LibCheck.cmake b/cmake/LibCheck.cmake new file mode 100644 index 000000000..3f12bdf79 --- /dev/null +++ b/cmake/LibCheck.cmake @@ -0,0 +1,104 @@ +include (CMakeParseArguments) +include (CheckFunctionExists) +#============================================================================== +# +# FUNCTIONS TO HELP WITH Check* MODULES +# +#============================================================================== + +#______________________________________________________________________________ +# - Basic function to check a property of a package using a try_compile step +# +# SYNTAX: check_macro ( +# NAME +# HINTS ... +# DEFINITIONS ... +# COMMENT ) +# +function (check_macro VARIABLE) + + # Parse the input arguments + set (oneValueArgs COMMENT NAME) + set (multiValueArgs HINTS DEFINITIONS) + cmake_parse_arguments (${VARIABLE} "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + # If the return variable is defined, already, don't continue + if (NOT DEFINED ${VARIABLE}) + + message (STATUS "Checking ${${VARIABLE}_COMMENT}") + find_file (${VARIABLE}_TRY_FILE + NAMES ${${VARIABLE}_NAME} + HINTS ${${VARIABLE}_HINTS}) + if (${VARIABLE}_TRY_FILE) + try_compile (COMPILE_RESULT + ${CMAKE_CURRENT_BINARY_DIR}/try${VARIABLE} + SOURCES ${${VARIABLE}_TRY_FILE} + COMPILE_DEFINITIONS ${${VARIABLE}_DEFINITIONS} + OUTPUT_VARIABLE TryOUT) + if (COMPILE_RESULT) + message (STATUS "Checking ${${VARIABLE}_COMMENT} - yes") + else () + message (STATUS "Checking ${${VARIABLE}_COMMENT} - no") + endif () + + set (${VARIABLE} ${COMPILE_RESULT} + CACHE BOOL "${${VARIABLE}_COMMENT}") + + else () + message (STATUS "Checking ${${VARIABLE}_COMMENT} - failed") + endif () + + unset (${VARIABLE}_TRY_FILE CACHE) + endif () + +endfunction () + +#______________________________________________________________________________ +# - Basic function to check the version of a package using a try_run step +# +# SYNTAX: check_version ( +# NAME +# HINTS ... +# DEFINITIONS ...) +# +function (check_version PKG) + + # Parse the input arguments + set (oneValueArgs NAME MACRO_REGEX) + set (multiValueArgs HINTS) + cmake_parse_arguments (${PKG} "" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + # If the return variable is defined, already, don't continue + if (NOT DEFINED ${PKG}_VERSION) + + message (STATUS "Checking ${PKG} version") + find_file (${PKG}_VERSION_HEADER + NAMES ${${PKG}_NAME} + HINTS ${${PKG}_HINTS}) + if (${PKG}_VERSION_HEADER) + set (def) + file (STRINGS ${${PKG}_VERSION_HEADER} deflines + REGEX "^#define[ \\t]+${${PKG}_MACRO_REGEX}") + foreach (defline IN LISTS deflines) + string (REPLACE "\"" "" defline "${defline}") + string (REPLACE "." "" defline "${defline}") + string (REGEX REPLACE "[ \\t]+" ";" deflist "${defline}") + list (GET deflist 2 arg) + list (APPEND def ${arg}) + endforeach () + string (REPLACE ";" "." vers "${def}") + message (STATUS "Checking ${PKG} version - ${vers}") + set (${PKG}_VERSION ${vers} + CACHE STRING "${PKG} version string") + if (${PKG}_VERSION VERSION_LESS ${PKG}_FIND_VERSION}) + message (FATAL_ERROR "${PKG} version insufficient") + endif () + else () + message (STATUS "Checking ${PKG} version - failed") + endif () + + unset (${PKG}_VERSION_HEADER CACHE) + + endif () + +endfunction () \ No newline at end of file diff --git a/cmake/LibFind.cmake b/cmake/LibFind.cmake new file mode 100644 index 000000000..61cd93aa3 --- /dev/null +++ b/cmake/LibFind.cmake @@ -0,0 +1,333 @@ +include (CMakeParseArguments) +include(FindPackageHandleStandardArgs) + +#============================================================================== +# +# FUNCTIONS TO HELP WITH Find* MODULES +# +#============================================================================== + +#______________________________________________________________________________ +# - Wrapper for finding static libraries ONLY +# +macro (find_static_library) + set (_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) + set (CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX}) + find_library(${ARGN}) + set (CMAKE_FIND_LIBRARY_SUFFIXES ${_CMAKE_FIND_LIBRARY_SUFFIXES}) + unset (_CMAKE_FIND_LIBRARY_SUFFIXES) +endmacro () + + +#______________________________________________________________________________ +# - Wrapper for finding shared/dynamic libraries ONLY +# +macro (find_shared_library) + set (_CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES}) + set (CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_SHARED_LIBRARY_SUFFIX}) + find_library(${ARGN}) + set (CMAKE_FIND_LIBRARY_SUFFIXES ${_CMAKE_FIND_LIBRARY_SUFFIXES}) + unset (_CMAKE_FIND_LIBRARY_SUFFIXES) +endmacro () + + +#______________________________________________________________________________ +# - Function to determine type (SHARED or STATIC) of library +# +# Input: +# LIB (FILE) +# +# Returns: +# RETURN_VAR (BOOL) +# +function (is_shared_library RETURN_VAR LIB) + get_filename_component(libext ${LIB} EXT) + if (libext MATCHES ${CMAKE_SHARED_LIBRARY_SUFFIX}) + set (${RETURN_VAR} TRUE PARENT_SCOPE) + else () + set (${RETURN_VAR} FALSE PARENT_SCOPE) + endif () +endfunction () + + +#______________________________________________________________________________ +# - Function to define a valid package component +# +# Input: +# ${PKG}_DEFAULT (BOOL) +# ${PKG}_COMPONENT (STRING) +# ${PKG}_INCLUDE_NAMES (LIST) +# ${PKG}_LIBRARY_NAMES (LIST) +# +# Returns: +# ${PKG}_DEFAULT_COMPONENT (STRING) +# ${PKG}_VALID_COMPONENTS (LIST) +# ${PKG}_${COMPONENT}_INCLUDE_NAMES (LIST) +# ${PKG}_${COMPONENT}_LIBRARY_NAMES (LIST) +# +function (define_package_component PKG) + + # Parse the input arguments + set (options DEFAULT) + set (oneValueArgs COMPONENT) + set (multiValueArgs INCLUDE_NAMES LIBRARY_NAMES) + cmake_parse_arguments (${PKG} "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + if (${PKG}_COMPONENT) + set (PKGCOMP ${PKG}_${${PKG}_COMPONENT}) + else () + set (PKGCOMP ${PKG}) + endif () + + # Set return values + if (${PKG}_COMPONENT) + if (${PKG}_DEFAULT) + set (${PKG}_DEFAULT_COMPONENT ${${PKG}_COMPONENT} PARENT_SCOPE) + endif () + set (VALID_COMPONENTS ${${PKG}_VALID_COMPONENTS}) + list (APPEND VALID_COMPONENTS ${${PKG}_COMPONENT}) + set (${PKG}_VALID_COMPONENTS ${VALID_COMPONENTS} PARENT_SCOPE) + endif () + set (${PKGCOMP}_INCLUDE_NAMES ${${PKG}_INCLUDE_NAMES} PARENT_SCOPE) + set (${PKGCOMP}_LIBRARY_NAMES ${${PKG}_LIBRARY_NAMES} PARENT_SCOPE) + +endfunction () + + +#______________________________________________________________________________ +# - Function to find valid package components +# +# Assumes pre-defined variables: +# ${PKG}_FIND_COMPONENTS (LIST) +# ${PKG}_DEFAULT_COMPONENT (STRING) +# ${PKG}_VALID_COMPONENTS (LIST) +# +# Returns: +# ${PKG}_FIND_VALID_COMPONENTS (LIST) +# +function (find_valid_components PKG) + + if (NOT ${PKG}_FIND_COMPONENTS) + set (${PKG}_FIND_COMPONENTS ${${PKG}_DEFAULT_COMPONENT}) + endif () + + set (FIND_VALID_COMPONENTS) + foreach (comp IN LISTS ${PKG}_FIND_COMPONENTS) + if (";${${PKG}_VALID_COMPONENTS};" MATCHES ";${comp};") + list (APPEND FIND_VALID_COMPONENTS ${comp}) + endif () + endforeach () + + set (${PKG}_FIND_VALID_COMPONENTS ${FIND_VALID_COMPONENTS} PARENT_SCOPE) + +endfunction () + + +#______________________________________________________________________________ +# - Initialize a list of paths from a list of includes and libraries +# +# Input: +# INCLUDE_DIRECTORIES +# LIBRARIES +# +# Ouput: +# ${PATHLIST} +# +function (initialize_paths PATHLIST) + + # Parse the input arguments + set (multiValueArgs INCLUDE_DIRECTORIES LIBRARIES) + cmake_parse_arguments (INIT "" "" "${multiValueArgs}" ${ARGN}) + + set (paths) + foreach (inc IN LISTS INIT_INCLUDE_DIRECTORIES) + list (APPEND paths ${inc}) + get_filename_component (dname ${inc} NAME) + if (dname MATCHES "include") + get_filename_component (prefx ${inc} PATH) + list (APPEND paths ${prefx}) + endif () + endforeach () + foreach (lib IN LISTS INIT_LIBRARIES) + get_filename_component (libdir ${lib} PATH) + list (APPEND paths ${libdir}) + get_filename_component (dname ${libdir} PATH) + if (dname MATCHES "lib") + get_filename_component (prefx ${libdir} PATH) + list (APPEND paths ${prefx}) + endif () + endforeach () + + set (${PATHLIST} ${paths} PARENT_SCOPE) + +endfunction () + + +#______________________________________________________________________________ +# - Basic find package macro for a specific component +# +# Assumes pre-defined variables: +# ${PKG}_${COMP}_INCLUDE_NAMES or ${PKG}_INCLUDE_NAMES +# ${PKG}_${COMP}_LIBRARY_NAMES or ${PKG}_LIBRARY_NAMES +# +# Input: +# ${PKG}_COMPONENT +# ${PKG}_HINTS +# ${PKG}_PATHS +# +function (find_package_component PKG) + + # Parse the input arguments + set (options) + set (oneValueArgs COMPONENT) + set (multiValueArgs HINTS PATHS) + cmake_parse_arguments (${PKG} "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + set (COMP ${${PKG}_COMPONENT}) + if (COMP) + set (PKGCOMP ${PKG}_${COMP}) + else () + set (PKGCOMP ${PKG}) + endif () + string (TOUPPER ${PKG} PKGUP) + string (TOUPPER ${PKGCOMP} PKGCOMPUP) + + # Only continue if package not found already + if (NOT ${PKGCOMP}_FOUND) + + # Handle QUIET and REQUIRED arguments + if (${${PKG}_FIND_QUIETLY}) + set (${PKGCOMP}_FIND_QUIETLY TRUE) + endif () + if (${${PKG}_FIND_REQUIRED}) + set (${PKGCOMP}_FIND_REQUIRED TRUE) + endif () + + # Determine search order + set (SEARCH_DIRS) + if (${PKG}_HINTS) + list (APPEND SEARCH_DIRS ${${PKG}_HINTS}) + endif () + if (${PKGCOMP}_PATH) + list (APPEND SEARCH_DIRS ${${PKGCOMP}_PATH}) + endif () + if (${PKG}_PATH) + list (APPEND SEARCH_DIRS ${${PKG}_PATH}) + endif () + if (DEFINED ENV{${PKGCOMPUP}}) + list (APPEND SEARCH_DIRS $ENV{${PKGCOMPUP}}) + endif () + if (DEFINED ENV{${PKGUP}}) + list (APPEND SEARCH_DIRS $ENV{${PKGUP}}) + endif () + if (CMAKE_SYSTEM_PREFIX_PATH) + list (APPEND SEARCH_DIRS ${CMAKE_SYSTEM_PREFIX_PATH}) + endif () + if (${PKG}_PATHS) + list (APPEND SEARCH_DIRS ${${PKG}_PATHS}) + endif () + + # Start the search for the include file and library file. Only overload + # if the variable is not defined. + foreach (suffix PREFIX LIBRARY INCLUDE_DIR) + if (NOT DEFINED ${PKGCOMP}_${suffix}) + set (${PKGCOMP}_${suffix} ${PKGCOMP}_${suffix}-NOTFOUND) + endif () + endforeach () + + foreach (dir IN LISTS SEARCH_DIRS) + + # Search for include file names in current dirrectory + foreach (iname IN LISTS ${PKGCOMP}_INCLUDE_NAMES) + if (EXISTS ${dir}/${iname}) + set (${PKGCOMP}_PREFIX ${dir}) + set (${PKGCOMP}_INCLUDE_DIR ${dir}) + break () + endif () + if (EXISTS ${dir}/include/${iname}) + set (${PKGCOMP}_PREFIX ${dir}) + set (${PKGCOMP}_INCLUDE_DIR ${dir}/include) + break () + endif () + endforeach () + + # Search for library file names in the found prefix only! + if (${PKGCOMP}_PREFIX) + find_library (${PKGCOMP}_LIBRARY + NAMES ${${PKGCOMP}_LIBRARY_NAMES} + PATHS ${${PKGCOMP}_PREFIX} + PATH_SUFFIXES lib + NO_DEFAULT_PATH) + + # If found, check if library is static or dynamic + if (${PKGCOMP}_LIBRARY) + is_shared_library (${PKGCOMP}_IS_SHARED ${${PKGCOMP}_LIBRARY}) + + # If we want only shared libraries, and it isn't shared... + if (PREFER_SHARED AND NOT ${PKGCOMP}_IS_SHARED) + find_shared_library (${PKGCOMP}_SHARED_LIBRARY + NAMES ${${PKGCOMP}_LIBRARY_NAMES} + PATHS ${${PKGCOMP}_PREFIX} + PATH_SUFFIXES lib + NO_DEFAULT_PATH) + if (${PKGCOMP}_SHARED_LIBRARY) + set (${PKGCOMP}_LIBRARY ${${PKGCOMP}_SHARED_LIBRARY}) + set (${PKGCOMP}_IS_SHARED TRUE) + endif () + + # If we want only static libraries, and it is shared... + elseif (PREFER_STATIC AND ${PKGCOMP}_IS_SHARED) + find_static_library (${PKGCOMP}_STATIC_LIBRARY + NAMES ${${PKGCOMP}_LIBRARY_NAMES} + PATHS ${${PKGCOMP}_PREFIX} + PATH_SUFFIXES lib + NO_DEFAULT_PATH) + if (${PKGCOMP}_STATIC_LIBRARY) + set (${PKGCOMP}_LIBRARY ${${PKGCOMP}_STATIC_LIBRARY}) + set (${PKGCOMP}_IS_SHARED FALSE) + endif () + endif () + endif () + + # If include dir and library both found, then we're done + if (${PKGCOMP}_INCLUDE_DIR AND ${PKGCOMP}_LIBRARY) + break () + + # Otherwise, reset the search variables and continue + else () + set (${PKGCOMP}_PREFIX ${PKGCOMP}_PREFIX-NOTFOUND) + set (${PKGCOMP}_INCLUDE_DIR ${PKGCOMP}_INCLUDE_DIR-NOTFOUND) + set (${PKGCOMP}_LIBRARY ${PKGCOMP}_LIBRARY-NOTFOUND) + endif () + endif () + + endforeach () + + # handle the QUIETLY and REQUIRED arguments and + # set NetCDF_C_FOUND to TRUE if all listed variables are TRUE + find_package_handle_standard_args (${PKGCOMP} DEFAULT_MSG + ${PKGCOMP}_LIBRARY + ${PKGCOMP}_INCLUDE_DIR) + mark_as_advanced (${PKGCOMP}_INCLUDE_DIR ${PKGCOMP}_LIBRARY) + + # HACK For bug in CMake v3.0: + set (${PKGCOMP}_FOUND ${${PKGCOMPUP}_FOUND}) + + # Set return variables + if (${PKGCOMP}_FOUND) + set (${PKGCOMP}_INCLUDE_DIRS ${${PKGCOMP}_INCLUDE_DIR}) + set (${PKGCOMP}_LIBRARIES ${${PKGCOMP}_LIBRARY}) + endif () + + # Set variables in parent scope + set (${PKGCOMP}_FOUND ${${PKGCOMP}_FOUND} PARENT_SCOPE) + set (${PKGCOMP}_INCLUDE_DIR ${${PKGCOMP}_INCLUDE_DIR} PARENT_SCOPE) + set (${PKGCOMP}_INCLUDE_DIRS ${${PKGCOMP}_INCLUDE_DIRS} PARENT_SCOPE) + set (${PKGCOMP}_LIBRARY ${${PKGCOMP}_LIBRARY} PARENT_SCOPE) + set (${PKGCOMP}_LIBRARIES ${${PKGCOMP}_LIBRARIES} PARENT_SCOPE) + set (${PKGCOMP}_IS_SHARED ${${PKGCOMP}_IS_SHARED} PARENT_SCOPE) + + endif () + +endfunction () + + + diff --git a/share/CMakeLists.txt b/share/CMakeLists.txt index 8c8e5a701..d088e58c9 100644 --- a/share/CMakeLists.txt +++ b/share/CMakeLists.txt @@ -19,8 +19,9 @@ add_library(cdeps_share ${GenF90_SRCS} shr_strconvert_mod.F90 shr_precip_mod.F90 shr_string_mod.F90) +message("HERE ${PIO_Fortran_INCLUDE_DIR}") +target_include_directories (cdeps_share PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${ESMF_F90COMPILEPATHS} ${PIO_Fortran_INCLUDE_DIRS}) -target_include_directories (cdeps_share PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${ESMF_F90COMPILEPATHS} ${PIO_INCDIR}) #===== genf90 ===== if (DEFINED GENF90_PATH) From db398b4ef85665d63c28176ac02c327fad90f93c Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Tue, 21 Jul 2020 16:25:55 -0600 Subject: [PATCH 003/153] fix standalone build --- CMakeLists.txt | 2 +- cmake/FindFoX.cmake | 10 +++++----- cmake/FindPIO.cmake | 15 ++++++++------- share/CMakeLists.txt | 2 +- streams/CMakeLists.txt | 4 ++-- 5 files changed, 17 insertions(+), 16 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5a308e0ef..9cdb8965a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,7 +4,7 @@ project(NUOPC_DATA_MODELS LANGUAGES Fortran VERSION 0.1) list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) include(ExternalProject) find_package(ESMF REQUIRED) -find_package(PIO REQUIRED) +find_package(PIO REQUIRED COMPONENT C Fortran) find_package(FoX REQUIRED) if (DEFINED CIMEROOT) diff --git a/cmake/FindFoX.cmake b/cmake/FindFoX.cmake index f26b7b3e4..7ddb02b1a 100644 --- a/cmake/FindFoX.cmake +++ b/cmake/FindFoX.cmake @@ -1,8 +1,8 @@ -# - Try to find FoX +# - Try to find FoX +# +# This can be controled by setting FoX_PATH or FoX__PATH Cmake variables, +# where is the COMPONENT language one needs. # -# This can be controled by setting FoX_PATH or FoX__PATH Cmake variables, -# where is the COMPONENT language one needs. -# # Once done, this will define: # # FoX__FOUND (BOOL) - system has FoX @@ -36,5 +36,5 @@ foreach (pcomp IN LISTS FoX_FIND_VALID_COMPONENTS) find_package_component(FoX COMPONENT ${pcomp}) endforeach () if(FoX_Fortran_FOUND) -message(" Found FoX:") +message(" Found FoX: ${FoX_Fortran_INCLUDE_DIR}") endif() \ No newline at end of file diff --git a/cmake/FindPIO.cmake b/cmake/FindPIO.cmake index d2761d20c..6de7030ec 100644 --- a/cmake/FindPIO.cmake +++ b/cmake/FindPIO.cmake @@ -1,8 +1,8 @@ -# - Try to find PIO +# - Try to find PIO +# +# This can be controled by setting PIO_PATH or PIO__PATH Cmake variables, +# where is the COMPONENT language one needs. # -# This can be controled by setting PIO_PATH or PIO__PATH Cmake variables, -# where is the COMPONENT language one needs. -# # Once done, this will define: # # PIO__FOUND (BOOL) - system has PIO @@ -23,14 +23,15 @@ define_package_component(PIO DEFAULT LIBRARY_NAMES pioc) # Define PIO Fortran Component -define_package_component(PIO - Component Fortran +define_package_component(PIO + COMPONENT Fortran INCLUDE_NAMES pio.mod pio.inc LIBRARY_NAMES piof) # Search for list of valid components requested find_valid_components(PIO) +message("This is ${PIO_FIND_COMPONENTS}") #============================================================================== # SEARCH FOR VALIDATED COMPONENTS foreach (pcomp IN LISTS PIO_FIND_VALID_COMPONENTS) @@ -100,4 +101,4 @@ foreach (pcomp IN LISTS PIO_FIND_VALID_COMPONENTS) endforeach () message("PIO_C_FOUND ${PIO_C_FOUND}") message("PIO_Fortran_FOUND ${PIO_Fortran_FOUND}") -message("PIO_INCLUDE_DIR ${PIO_INCLUDE_DIR}") +message("PIO_Fortran_INCLUDE_DIR ${PIO_Fortran_INCLUDE_DIR}") diff --git a/share/CMakeLists.txt b/share/CMakeLists.txt index d088e58c9..06bb2c7d3 100644 --- a/share/CMakeLists.txt +++ b/share/CMakeLists.txt @@ -19,7 +19,7 @@ add_library(cdeps_share ${GenF90_SRCS} shr_strconvert_mod.F90 shr_precip_mod.F90 shr_string_mod.F90) -message("HERE ${PIO_Fortran_INCLUDE_DIR}") + target_include_directories (cdeps_share PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${ESMF_F90COMPILEPATHS} ${PIO_Fortran_INCLUDE_DIRS}) diff --git a/streams/CMakeLists.txt b/streams/CMakeLists.txt index 750a88b22..902b53add 100644 --- a/streams/CMakeLists.txt +++ b/streams/CMakeLists.txt @@ -17,8 +17,8 @@ if(BLD_STANDALONE) add_dependencies(streams cdeps_share) endif() target_include_directories (streams PUBLIC ${ESMF_F90COMPILEPATHS}) -target_include_directories (streams PUBLIC ${PIO_INCDIR}) -target_include_directories (streams PUBLIC ${FOX}/finclude) +target_include_directories (streams PUBLIC ${PIO_Fortran_INCLUDE_DIR}) +target_include_directories (streams PUBLIC ${FoX_Fortran_INCLUDE_DIR}) target_include_directories (streams PUBLIC ${CMAKE_BINARY_DIR}/share) install(TARGETS streams LIBRARY DESTINATION lib) From b0820dc2e6bd16f847a5c019abef2e95dc333d1d Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Tue, 21 Jul 2020 16:46:17 -0600 Subject: [PATCH 004/153] update pio path --- CMakeLists.txt | 2 +- datm/CMakeLists.txt | 2 +- dice/CMakeLists.txt | 2 +- dlnd/CMakeLists.txt | 2 +- docn/CMakeLists.txt | 2 +- drof/CMakeLists.txt | 2 +- dshr/CMakeLists.txt | 2 +- dwav/CMakeLists.txt | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9cdb8965a..6d273b518 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,7 +25,7 @@ endif() if(BLD_STANDALONE) add_subdirectory(share) list(APPEND EXTRA_LIBS cdeps_share) - list(APPEND EXTRA_INCLUDES "${PIO_INCDIR}" "${CMAKE_BINARY_DIR}/share" ) + list(APPEND EXTRA_INCLUDES "${CMAKE_BINARY_DIR}/share" ) endif() diff --git a/datm/CMakeLists.txt b/datm/CMakeLists.txt index 61785d7d1..a39d02e23 100644 --- a/datm/CMakeLists.txt +++ b/datm/CMakeLists.txt @@ -12,4 +12,4 @@ target_include_directories (datm PUBLIC "${CMAKE_BINARY_DIR}/dshr") target_include_directories (datm PUBLIC "${CMAKE_SOURCE_DIR}") target_include_directories (datm PUBLIC "${CMAKE_BINARY_DIR}/share") target_include_directories (datm PUBLIC "${CMAKE_BINARY_DIR}/streams") -target_include_directories (datm PUBLIC "${PIO_INCDIR}") +target_include_directories (datm PUBLIC "${PIO_Fortran_INCLUDE_DIR}") diff --git a/dice/CMakeLists.txt b/dice/CMakeLists.txt index 841ddd71e..f45a446b3 100644 --- a/dice/CMakeLists.txt +++ b/dice/CMakeLists.txt @@ -17,4 +17,4 @@ target_include_directories (dice PUBLIC "${CMAKE_BINARY_DIR}/dshr") target_include_directories (dice PUBLIC "${CMAKE_SOURCE_DIR}") target_include_directories (dice PUBLIC "${CMAKE_BINARY_DIR}/share") target_include_directories (dice PUBLIC "${CMAKE_BINARY_DIR}/streams") -target_include_directories (dice PUBLIC "${PIO_INCDIR}") +target_include_directories (dice PUBLIC "${PIO_Fortran_INCLUDE_DIR}") diff --git a/dlnd/CMakeLists.txt b/dlnd/CMakeLists.txt index 03a81ac0e..ae080d307 100644 --- a/dlnd/CMakeLists.txt +++ b/dlnd/CMakeLists.txt @@ -16,4 +16,4 @@ target_include_directories (dlnd PUBLIC "${CMAKE_BINARY_DIR}/dshr") target_include_directories (dlnd PUBLIC "${CMAKE_SOURCE_DIR}") target_include_directories (dlnd PUBLIC "${CMAKE_BINARY_DIR}/share") target_include_directories (dlnd PUBLIC "${CMAKE_BINARY_DIR}/streams") -target_include_directories (dlnd PUBLIC "${PIO_INCDIR}") +target_include_directories (dlnd PUBLIC "${PIO_Fortran_INCLUDE_DIR}") diff --git a/docn/CMakeLists.txt b/docn/CMakeLists.txt index 1253fd1d4..33e3ba01c 100644 --- a/docn/CMakeLists.txt +++ b/docn/CMakeLists.txt @@ -21,4 +21,4 @@ target_include_directories (docn PUBLIC "${CMAKE_BINARY_DIR}/dshr") target_include_directories (docn PUBLIC "${CMAKE_SOURCE_DIR}") target_include_directories (docn PUBLIC "${CMAKE_BINARY_DIR}/share") target_include_directories (docn PUBLIC "${CMAKE_BINARY_DIR}/streams") -target_include_directories (docn PUBLIC "${PIO_INCDIR}") +target_include_directories (docn PUBLIC "${PIO_Fortran_INCLUDE_DIR}") diff --git a/drof/CMakeLists.txt b/drof/CMakeLists.txt index 41ded49c8..62a92cb83 100644 --- a/drof/CMakeLists.txt +++ b/drof/CMakeLists.txt @@ -16,4 +16,4 @@ target_include_directories (drof PUBLIC "${CMAKE_BINARY_DIR}/dshr") target_include_directories (drof PUBLIC "${CMAKE_SOURCE_DIR}") target_include_directories (drof PUBLIC "${CMAKE_BINARY_DIR}/share") target_include_directories (drof PUBLIC "${CMAKE_BINARY_DIR}/streams") -target_include_directories (drof PUBLIC "${PIO_INCDIR}") +target_include_directories (drof PUBLIC "${PIO_Fortran_INCLUDE_DIR}") diff --git a/dshr/CMakeLists.txt b/dshr/CMakeLists.txt index f45a646bb..1a98d00ab 100644 --- a/dshr/CMakeLists.txt +++ b/dshr/CMakeLists.txt @@ -19,6 +19,6 @@ add_dependencies(dshr streams) target_include_directories (dshr PUBLIC ${ESMF_F90COMPILEPATHS}) target_include_directories (dshr PUBLIC "${CMAKE_BINARY_DIR}/streams") target_include_directories (dshr PUBLIC "${CMAKE_BINARY_DIR}/share") -target_include_directories (dshr PUBLIC "${PIO_INCDIR}") +target_include_directories (dshr PUBLIC "${PIO_Fortran_INCLUDE_DIR}") install(TARGETS dshr LIBRARY DESTINATION lib) diff --git a/dwav/CMakeLists.txt b/dwav/CMakeLists.txt index 27dced49e..c848741c6 100644 --- a/dwav/CMakeLists.txt +++ b/dwav/CMakeLists.txt @@ -16,4 +16,4 @@ target_include_directories (dwav PUBLIC "${CMAKE_BINARY_DIR}/dshr") target_include_directories (dwav PUBLIC "${CMAKE_SOURCE_DIR}") target_include_directories (dwav PUBLIC "${CMAKE_BINARY_DIR}/share") target_include_directories (dwav PUBLIC "${CMAKE_BINARY_DIR}/streams") -target_include_directories (dwav PUBLIC "${PIO_INCDIR}") +target_include_directories (dwav PUBLIC "${PIO_Fortran_INCLUDE_DIR}") From de999e6375ede9d85b73a389646622d39d3c82ee Mon Sep 17 00:00:00 2001 From: uturuncoglu Date: Mon, 27 Jul 2020 10:48:14 -0600 Subject: [PATCH 005/153] add tskn, lwnet and wind speed, fix swnet --- datm/cime_config/namelist_definition_datm.xml | 3 +++ datm/datm_datamode_era5_mod.F90 | 26 ++++++++++++++++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/datm/cime_config/namelist_definition_datm.xml b/datm/cime_config/namelist_definition_datm.xml index 479c5587b..751fc6e47 100644 --- a/datm/cime_config/namelist_definition_datm.xml +++ b/datm/cime_config/namelist_definition_datm.xml @@ -2072,6 +2072,7 @@ u10 Sa_u v10 Sa_v t2m Sa_tbot + skt Sa_tskn d2m Sa_tdew msl Sa_pslv sp Sa_pbot @@ -2081,7 +2082,9 @@ csf Faxa_snowc lsf Faxa_snowl ssrd Faxa_swdn + ssr Faxa_swnet strd Faxa_lwdn + str Faxa_lwnet aluvp Faxa_swvdr aluvd Faxa_swvdf alnip Faxa_swndr diff --git a/datm/datm_datamode_era5_mod.F90 b/datm/datm_datamode_era5_mod.F90 index ac37e22d7..0efddfd01 100644 --- a/datm/datm_datamode_era5_mod.F90 +++ b/datm/datm_datamode_era5_mod.F90 @@ -27,6 +27,7 @@ module datm_datamode_era5_mod real(r8), pointer :: Sa_z(:) => null() real(r8), pointer :: Sa_u(:) => null() real(r8), pointer :: Sa_v(:) => null() + real(r8), pointer :: Sa_wspd(:) => null() real(r8), pointer :: Sa_tbot(:) => null() real(r8), pointer :: Sa_ptem(:) => null() real(r8), pointer :: Sa_shum(:) => null() @@ -34,6 +35,7 @@ module datm_datamode_era5_mod real(r8), pointer :: Sa_pbot(:) => null() real(r8), pointer :: Sa_pslv(:) => null() real(r8), pointer :: Faxa_lwdn(:) => null() + real(r8), pointer :: Faxa_lwnet(:) => null() real(r8), pointer :: Faxa_rain(:) => null() real(r8), pointer :: Faxa_rainc(:) => null() real(r8), pointer :: Faxa_rainl(:) => null() @@ -61,7 +63,7 @@ module datm_datamode_era5_mod real(r8) , parameter :: rdair = SHR_CONST_RDAIR ! dry air gas constant ~ J/K/kg real(r8) , parameter :: rhofw = SHR_CONST_RHOFW ! density of fresh water ~ kg/m^3 - character(*), parameter :: nullstr = 'null' + character(*), parameter :: nullstr = 'undefined' character(*), parameter :: rpfile = 'rpointer.atm' character(*), parameter :: u_FILE_u = & __FILE__ @@ -89,7 +91,9 @@ subroutine datm_datamode_era5_advertise(exportState, fldsexport, & call dshr_fldList_add(fldsExport, 'Sa_z' ) call dshr_fldList_add(fldsExport, 'Sa_u' ) call dshr_fldList_add(fldsExport, 'Sa_v' ) + call dshr_fldList_add(fldsExport, 'Sa_wspd' ) call dshr_fldList_add(fldsExport, 'Sa_tbot' ) + call dshr_fldList_add(fldsExport, 'Sa_tskn' ) call dshr_fldList_add(fldsExport, 'Sa_ptem' ) call dshr_fldList_add(fldsExport, 'Sa_dens' ) call dshr_fldList_add(fldsExport, 'Sa_pslv' ) @@ -104,9 +108,10 @@ subroutine datm_datamode_era5_advertise(exportState, fldsexport, & call dshr_fldList_add(fldsExport, 'Faxa_swvdr' ) call dshr_fldList_add(fldsExport, 'Faxa_swndf' ) call dshr_fldList_add(fldsExport, 'Faxa_swvdf' ) + call dshr_fldList_add(fldsExport, 'Faxa_swdn' ) call dshr_fldList_add(fldsExport, 'Faxa_swnet' ) call dshr_fldList_add(fldsExport, 'Faxa_lwdn' ) - call dshr_fldList_add(fldsExport, 'Faxa_swdn' ) + call dshr_fldList_add(fldsExport, 'Faxa_lwnet' ) call dshr_fldList_add(fldsExport, 'Faxa_sen' ) call dshr_fldList_add(fldsExport, 'Faxa_lat' ) call dshr_fldList_add(fldsExport, 'Faxa_taux' ) @@ -144,6 +149,12 @@ subroutine datm_datamode_era5_init_pointers(exportState, sdat, rc) ! get export state pointers call dshr_state_getfldptr(exportState, 'Sa_z' , fldptr1=Sa_z , rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Sa_u' , fldptr1=Sa_u , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Sa_v' , fldptr1=Sa_v , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Sa_wspd' , fldptr1=Sa_wspd , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return call dshr_state_getfldptr(exportState, 'Sa_tbot' , fldptr1=Sa_tbot , rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return call dshr_state_getfldptr(exportState, 'Sa_pbot' , fldptr1=Sa_pbot , rc=rc) @@ -176,6 +187,8 @@ subroutine datm_datamode_era5_init_pointers(exportState, sdat, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return call dshr_state_getfldptr(exportState, 'Faxa_swdn' , fldptr1=Faxa_swdn , rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Faxa_lwnet' , fldptr1=Faxa_lwnet , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return call dshr_state_getfldptr(exportState, 'Faxa_lwdn' , fldptr1=Faxa_lwdn , rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return call dshr_state_getfldptr(exportState, 'Faxa_sen' , fldptr1=Faxa_sen , rc=rc) @@ -241,6 +254,9 @@ subroutine datm_datamode_era5_advance(exportstate, masterproc, logunit, mpicom, !--- bottom layer height --- Sa_z(n) = 10.0_r8 + !--- calculate wind speed --- + Sa_wspd(n) = sqrt(Sa_u(n)*Sa_u(n)+Sa_v(n)*Sa_v(n)) + !--- temperature --- if (tbotmax < 50.0_r8) Sa_tbot(n) = Sa_tbot(n) + tkFrz ! Limit very cold forcing to 180K @@ -265,8 +281,11 @@ subroutine datm_datamode_era5_advance(exportstate, masterproc, logunit, mpicom, Faxa_swvdf(n) = Faxa_swdn(n)*Faxa_swvdf(n) Faxa_swndf(n) = Faxa_swdn(n)*Faxa_swndf(n) + !--- TODO: need to understand relationship between shortwave bands and net shortwave rad. + !--- currently it is provided directly from ERA5 and the total of the bands are not + !--- consistent with the swnet !--- swnet: a diagnostic quantity --- - Faxa_swnet(n) = Faxa_swndr(n) + Faxa_swvdr(n) + Faxa_swndf(n) + Faxa_swvdf(n) + !Faxa_swnet(n) = Faxa_swndr(n) + Faxa_swvdr(n) + Faxa_swndf(n) + Faxa_swvdf(n) end do !---------------------------------------------------------- @@ -275,6 +294,7 @@ subroutine datm_datamode_era5_advance(exportstate, masterproc, logunit, mpicom, ! convert J/m^2 to W/m^2 Faxa_lwdn(:) = Faxa_lwdn(:)/3600.0_r8 + Faxa_lwnet(:) = Faxa_lwnet(:)/3600.0_r8 Faxa_swdn(:) = Faxa_swdn(:)/3600.0_r8 Faxa_swvdr(:) = Faxa_swvdr(:)/3600.0_r8 Faxa_swndr(:) = Faxa_swndr(:)/3600.0_r8 From eb8e465e293b12d9b2ea823b0662adca6d9546c2 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Mon, 27 Jul 2020 13:47:19 -0600 Subject: [PATCH 006/153] more bld changes --- CMakeLists.txt | 15 +++++++++++++-- cime_config/buildlib | 2 ++ cmake/FindPIO.cmake | 1 - datm/atm_comp_nuopc.F90 | 6 ++---- streams/dshr_strdata_mod.F90 | 7 ++----- 5 files changed, 19 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6d273b518..c6f249991 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,8 +4,19 @@ project(NUOPC_DATA_MODELS LANGUAGES Fortran VERSION 0.1) list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) include(ExternalProject) find_package(ESMF REQUIRED) -find_package(PIO REQUIRED COMPONENT C Fortran) -find_package(FoX REQUIRED) +if (DEFINED PIO) + set(PIO_PATH ${PIO}) +else() + set(PIO_PATH $ENV{PIO}) +endif() +find_package(PIO REQUIRED COMPONENT C Fortran PATH ${PIO_PATH}) + +if (DEFINED FOX) + set(FOX_PATH ${FOX}) +else() + set(FOX_PATH $ENV{FOX}) +endif() +find_package(FoX REQUIRED HINT ${FOX}) if (DEFINED CIMEROOT) message("Using CIME in ${CIMEROOT} with compiler ${COMPILER}") diff --git a/cime_config/buildlib b/cime_config/buildlib index 24a498e03..2d7f6f858 100755 --- a/cime_config/buildlib +++ b/cime_config/buildlib @@ -58,6 +58,8 @@ def buildlib(bldroot, libroot, case, compname=None): cmake_flags += " -DCMAKE_INSTALL_PREFIX={} ".format(libroot) cmake_flags += " -DLIBROOT={} ".format(libroot) + srcpath cmake_flags += " -DMPILIB={} ".format(mpilib) + cmake_flags += " -DPIO={} ".format(os.path.join(case.get_value("EXEROOT"),sharedpath)) + cmake_flags += " -DFOX={} ".format(os.path.join(case.get_value("EXEROOT"),sharedpath)) logger.info("cmake_flags {}".format(cmake_flags)) s,o,e = run_cmd("cmake {} ".format(cmake_flags), from_dir=bldroot, verbose=True) diff --git a/cmake/FindPIO.cmake b/cmake/FindPIO.cmake index 6de7030ec..141834128 100644 --- a/cmake/FindPIO.cmake +++ b/cmake/FindPIO.cmake @@ -31,7 +31,6 @@ define_package_component(PIO # Search for list of valid components requested find_valid_components(PIO) -message("This is ${PIO_FIND_COMPONENTS}") #============================================================================== # SEARCH FOR VALIDATED COMPONENTS foreach (pcomp IN LISTS PIO_FIND_VALID_COMPONENTS) diff --git a/datm/atm_comp_nuopc.F90 b/datm/atm_comp_nuopc.F90 index a52fe9658..cbe3a4fcf 100644 --- a/datm/atm_comp_nuopc.F90 +++ b/datm/atm_comp_nuopc.F90 @@ -330,8 +330,8 @@ subroutine InitializeRealize(gcomp, importState, exportState, clock, rc) integer(i8) :: stepno ! step number real(r8) :: nextsw_cday ! calendar of next atm sw character(CL) :: cvalue ! character string for input config - real(R8) :: orbEccen ! orb eccentricity (unit-less) - real(R8) :: orbMvelpp ! orb moving vernal eq (radians) + real(R8) :: orbEccen ! orb eccentricity (unist-less) + real(R8) :: orbMvelpp ! orb moving vernal eqa (radians) real(R8) :: orbLambm0 ! orb mean long of perhelion (radians) real(R8) :: orbObliqr ! orb obliquity (radians) logical :: isPresent, isSet @@ -571,7 +571,6 @@ subroutine datm_comp_run(importState, exportState, target_ymd, target_tod, targe call shr_strdata_setOrbs(sdat, orbEccen, orbMvelpp, orbLambm0, orbObliqr, idt) ! time and spatially interpolate to model time and grid - call t_barrierf('datm_BARRIER',mpicom) call ESMF_TraceRegionEnter('datm_strdata_advance') call shr_strdata_advance(sdat, target_ymd, target_tod, logunit, 'datm', rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return @@ -579,7 +578,6 @@ subroutine datm_comp_run(importState, exportState, target_ymd, target_tod, targe ! copy all fields from streams to export state as default ! This automatically will update the fields in the export state - call t_barrierf('datm_comp_dfield_copy_BARRIER', mpicom) call ESMF_TraceRegionEnter('datm_dfield_copy') call dshr_dfield_copy(dfields, sdat, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return diff --git a/streams/dshr_strdata_mod.F90 b/streams/dshr_strdata_mod.F90 index 9b069c8a7..150633769 100644 --- a/streams/dshr_strdata_mod.F90 +++ b/streams/dshr_strdata_mod.F90 @@ -6,7 +6,7 @@ module dshr_strdata_mod use ESMF use shr_kind_mod , only : r8=>shr_kind_r8, r4=>shr_kind_r4, i2=>shr_kind_I2 - use shr_kind_mod , only : cs=>shr_kind_cs, cl=>shr_kind_cl, cxx=>shr_kind_cxx + use shr_kind_mod , only : cs=>shr_kind_cs, cl=>shr_kind_cl, cxx=>shr_kind_cxx use shr_sys_mod , only : shr_sys_abort use shr_const_mod , only : shr_const_pi, shr_const_cDay, shr_const_spval use shr_cal_mod , only : shr_cal_calendarname, shr_cal_timeSet @@ -212,7 +212,7 @@ subroutine shr_strdata_init_from_inline(sdat, my_task, logunit, compname, model_ type(shr_strdata_type) , intent(inout) :: sdat ! stream data type integer , intent(in) :: my_task ! my mpi task integer , intent(in) :: logunit ! stdout logunit - character(len=*) , intent(in) :: compname ! component name (e.g. ATM, OCN, ...) + character(len=*) , intent(in) :: compname ! component name (e.g. ATM, OCN, ...) type(ESMF_Clock) , intent(in) :: model_clock ! model clock type(ESMF_Mesh) , intent(in) :: model_mesh ! model mesh character(*) , intent(in) :: stream_meshFile ! full pathname to stream mesh file @@ -732,8 +732,6 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) ltimers = timers endif - if (.not.ltimers) call t_adj_detailf(tadj) - call ESMF_TraceRegionEnter(trim(lstr)//trim(timname)//'_total') sdat%ymd = ymd @@ -939,7 +937,6 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) endif ! nstreams > 0 call ESMF_TraceRegionExit(trim(lstr)//trim(timname)//'_total') - if (.not.ltimers) call t_adj_detailf(-tadj) end subroutine shr_strdata_advance From b916a5d1d78d63db60906cb1d7119cace3dff3de Mon Sep 17 00:00:00 2001 From: uturuncoglu Date: Mon, 27 Jul 2020 15:58:08 -0600 Subject: [PATCH 007/153] check fields in the state before returning pointers --- datm/datm_datamode_era5_mod.F90 | 6 ++++-- streams/dshr_methods_mod.F90 | 15 +++++++++++---- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/datm/datm_datamode_era5_mod.F90 b/datm/datm_datamode_era5_mod.F90 index 0efddfd01..e19201fe2 100644 --- a/datm/datm_datamode_era5_mod.F90 +++ b/datm/datm_datamode_era5_mod.F90 @@ -121,7 +121,7 @@ subroutine datm_datamode_era5_advertise(exportState, fldsexport, & do while (associated(fldlist)) call NUOPC_Advertise(exportState, standardName=fldlist%stdname, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call ESMF_LogWrite('(datm_comp_advertise): Fr_atm'//trim(fldList%stdname), ESMF_LOGMSG_INFO) + call ESMF_LogWrite('(datm_comp_advertise): Fr_atm '//trim(fldList%stdname), ESMF_LOGMSG_INFO) fldList => fldList%next enddo @@ -255,7 +255,9 @@ subroutine datm_datamode_era5_advance(exportstate, masterproc, logunit, mpicom, Sa_z(n) = 10.0_r8 !--- calculate wind speed --- - Sa_wspd(n) = sqrt(Sa_u(n)*Sa_u(n)+Sa_v(n)*Sa_v(n)) + if (associated(Sa_wspd)) then + Sa_wspd(n) = sqrt(Sa_u(n)*Sa_u(n)+Sa_v(n)*Sa_v(n)) + end if !--- temperature --- if (tbotmax < 50.0_r8) Sa_tbot(n) = Sa_tbot(n) + tkFrz diff --git a/streams/dshr_methods_mod.F90 b/streams/dshr_methods_mod.F90 index 861fc1093..36fad860d 100644 --- a/streams/dshr_methods_mod.F90 +++ b/streams/dshr_methods_mod.F90 @@ -44,17 +44,24 @@ subroutine dshr_state_getfldptr(State, fldname, fldptr1, fldptr2, rc) integer , intent(out) :: rc ! local variables - type(ESMF_Field) :: lfield + type(ESMF_Field) :: lfield + integer :: itemCount character(len=*), parameter :: subname='(dshr_state_getfldptr)' ! ---------------------------------------------- rc = ESMF_SUCCESS - call ESMF_StateGet(State, itemName=trim(fldname), field=lfield, rc=rc) + call ESMF_StateGet(State, itemSearch=trim(fldname), itemCount=itemCount, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return - call dshr_field_getfldptr(lfield, fldptr1=fldptr1, fldptr2=fldptr2, rc=rc) - if (chkerr(rc,__LINE__,u_FILE_u)) return + ! check field is in the state or not? + if (itemCount >= 1) then + call ESMF_StateGet(State, itemName=trim(fldname), field=lfield, rc=rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + + call dshr_field_getfldptr(lfield, fldptr1=fldptr1, fldptr2=fldptr2, rc=rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + end if end subroutine dshr_state_getfldptr From 44549e56fa8948c21c48df2f9ca08e99145e1471 Mon Sep 17 00:00:00 2001 From: uturuncoglu Date: Mon, 27 Jul 2020 19:57:07 -0600 Subject: [PATCH 008/153] add test for ERA5 --- datm/cime_config/testdefs/testlist_datm.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/datm/cime_config/testdefs/testlist_datm.xml b/datm/cime_config/testdefs/testlist_datm.xml index 2560fb1b8..ddfa2d781 100644 --- a/datm/cime_config/testdefs/testlist_datm.xml +++ b/datm/cime_config/testdefs/testlist_datm.xml @@ -102,5 +102,13 @@ + + + + + + + + From 6ac93fa11f73b4a28e36b6c2dac87bdaa4af6240 Mon Sep 17 00:00:00 2001 From: uturuncoglu Date: Wed, 29 Jul 2020 11:02:07 -0600 Subject: [PATCH 009/153] put extra log if it cannot find the field in the state --- streams/dshr_methods_mod.F90 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/streams/dshr_methods_mod.F90 b/streams/dshr_methods_mod.F90 index 36fad860d..e3ecf8266 100644 --- a/streams/dshr_methods_mod.F90 +++ b/streams/dshr_methods_mod.F90 @@ -61,6 +61,9 @@ subroutine dshr_state_getfldptr(State, fldname, fldptr1, fldptr2, rc) call dshr_field_getfldptr(lfield, fldptr1=fldptr1, fldptr2=fldptr2, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return + else + ! the call to just returns if it cannot find the field + call ESMF_LogWrite(trim(subname)//" Could not find the field: "//trim(fldname)//" just returning", ESMF_LOGMSG_INFO) end if end subroutine dshr_state_getfldptr From 5f9a6557a6f04430c243336f195a4825dd76ce7a Mon Sep 17 00:00:00 2001 From: Mariana Vertenstein Date: Wed, 29 Jul 2020 19:47:52 -0600 Subject: [PATCH 010/153] bug fixes --- datm/cime_config/namelist_definition_datm.xml | 11 ++++- dshr/dshr_dfield_mod.F90 | 9 ----- streams/dshr_strdata_mod.F90 | 26 +++++++----- streams/dshr_stream_mod.F90 | 40 +++++++++++-------- 4 files changed, 48 insertions(+), 38 deletions(-) diff --git a/datm/cime_config/namelist_definition_datm.xml b/datm/cime_config/namelist_definition_datm.xml index 479c5587b..9167c72a2 100644 --- a/datm/cime_config/namelist_definition_datm.xml +++ b/datm/cime_config/namelist_definition_datm.xml @@ -342,7 +342,7 @@ - $DATM_DOMAIN_MESH + $ATM_DOMAIN_MESH $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc @@ -351,7 +351,7 @@ - $DATM_DOMAIN_MESH + $ATM_DOMAIN_MESH $DIN_LOC_ROOT/atm/datm7/topo_forcing/topodata_0.9x1.SCRIP.210520_ESMFmesh.nc @@ -2409,6 +2409,10 @@ linear nearest nearest + coszen + nearest + coszen + nearest coszen nearest coszen @@ -2503,6 +2507,9 @@ 3.0 3.0 3.0 + 1.e30 + 1.e30 + 1.e30 diff --git a/dshr/dshr_dfield_mod.F90 b/dshr/dshr_dfield_mod.F90 index 8f4a774e8..6abcc1c36 100644 --- a/dshr/dshr_dfield_mod.F90 +++ b/dshr/dshr_dfield_mod.F90 @@ -120,15 +120,6 @@ subroutine dshr_dfield_add_1d(dfields, sdat, state_fld, strm_fld, state, logunit 110 format(a) end if - ! write output - if (masterproc) then - if (found) then - write(logunit,100)'(dshr_addfield_add) set pointer to stream field strm_'//trim(strm_fld)//& - ' stream index = ',ns,' field bundle index= ',nf -100 format(a,i6,2x,a,i6) - end if - end if - end subroutine dshr_dfield_add_1d !=============================================================================== diff --git a/streams/dshr_strdata_mod.F90 b/streams/dshr_strdata_mod.F90 index 7821351f0..6e2cf2a95 100644 --- a/streams/dshr_strdata_mod.F90 +++ b/streams/dshr_strdata_mod.F90 @@ -6,7 +6,7 @@ module dshr_strdata_mod use ESMF use shr_kind_mod , only : r8=>shr_kind_r8, r4=>shr_kind_r4, i2=>shr_kind_I2 - use shr_kind_mod , only : cs=>shr_kind_cs, cl=>shr_kind_cl, cxx=>shr_kind_cxx + use shr_kind_mod , only : cs=>shr_kind_cs, cl=>shr_kind_cl, cxx=>shr_kind_cxx use shr_sys_mod , only : shr_sys_abort use shr_const_mod , only : shr_const_pi, shr_const_cDay, shr_const_spval use shr_cal_mod , only : shr_cal_calendarname, shr_cal_timeSet @@ -213,7 +213,7 @@ subroutine shr_strdata_init_from_inline(sdat, my_task, logunit, compname, model_ type(shr_strdata_type) , intent(inout) :: sdat ! stream data type integer , intent(in) :: my_task ! my mpi task integer , intent(in) :: logunit ! stdout logunit - character(len=*) , intent(in) :: compname ! component name (e.g. ATM, OCN, ...) + character(len=*) , intent(in) :: compname ! component name (e.g. ATM, OCN, ...) type(ESMF_Clock) , intent(in) :: model_clock ! model clock type(ESMF_Mesh) , intent(in) :: model_mesh ! model mesh character(*) , intent(in) :: stream_meshFile ! full pathname to stream mesh file @@ -699,15 +699,13 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) logical :: checkflag = .false. integer :: npes integer :: my_task + integer :: nstreams real(r8) ,parameter :: solZenMin = 0.001_r8 ! minimum solar zenith angle integer ,parameter :: tadj = 2 character(len=*) ,parameter :: timname = "_strd_adv" character(*) ,parameter :: subname = "(shr_strdata_advance) " character(*) ,parameter :: F00 = "('(shr_strdata_advance) ',a)" character(*) ,parameter :: F01 = "('(shr_strdata_advance) ',a,a,i4,2(f10.5,2x))" - real(r8), pointer :: dataptr_temp1(:) - real(r8), pointer :: dataptr_temp2(:) - integer :: nstreams !------------------------------------------------------------------------------- rc = ESMF_SUCCESS @@ -809,21 +807,27 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) call shr_cal_timeSet(timeUB,sdat%pstrm(ns)%ymdUB,0,sdat%stream(ns)%calendar,rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return timeint = timeUB-timeLB - call ESMF_TimeIntervalGet(timeint,StartTimeIn=timeLB,d=dday) + call ESMF_TimeIntervalGet(timeint, StartTimeIn=timeLB, d=dday) if (ChkErr(rc,__LINE__,u_FILE_u)) return dtime = abs(real(dday,r8) + real(sdat%pstrm(ns)%todUB-sdat%pstrm(ns)%todLB,r8)/shr_const_cDay) sdat%pstrm(ns)%dtmin = min(sdat%pstrm(ns)%dtmin,dtime) sdat%pstrm(ns)%dtmax = max(sdat%pstrm(ns)%dtmax,dtime) + if ((sdat%pstrm(ns)%dtmax/sdat%pstrm(ns)%dtmin) > sdat%stream(ns)%dtlimit) then if (sdat%masterproc) then - write(sdat%logunit,*) trim(subname),' ERROR: for stream ',n - write(sdat%logunit,*) trim(subName),' ERROR: dt limit1 ',& - sdat%pstrm(ns)%dtmax, sdat%pstrm(ns)%dtmin, sdat%stream(ns)%dtlimit - write(sdat%logunit,*) trim(subName),' ERROR: dt limit2 ',& + write(sdat%logunit,*) trim(subname),' ERROR: for stream ',ns + write(sdat%logunit,*) trim(subName),' ERROR: dtime, dtmax, dtmin, dtlimit = ',& + dtime, sdat%pstrm(ns)%dtmax, sdat%pstrm(ns)%dtmin, sdat%stream(ns)%dtlimit + write(sdat%logunit,*) trim(subName),' ERROR: ymdLB, todLB, ymdUB, todUB = ', & sdat%pstrm(ns)%ymdLB, sdat%pstrm(ns)%todLB, sdat%pstrm(ns)%ymdUB, sdat%pstrm(ns)%todUB end if - call shr_sys_abort(trim(subName)//' ERROR dt limit for stream') + write(6,*) trim(subname),' ERROR: for stream ',ns + write(6,*) trim(subName),' ERROR: dtime, dtmax, dtmin, dtlimit = ',& + dtime, sdat%pstrm(ns)%dtmax, sdat%pstrm(ns)%dtmin, sdat%stream(ns)%dtlimit + write(6,*) trim(subName),' ERROR: ymdLB, todLB, ymdUB, todUB = ', & + sdat%pstrm(ns)%ymdLB, sdat%pstrm(ns)%todLB, sdat%pstrm(ns)%ymdUB, sdat%pstrm(ns)%todUB + call shr_sys_abort(trim(subName)//' ERROR dt limit for stream, see atm.log output') endif endif diff --git a/streams/dshr_stream_mod.F90 b/streams/dshr_stream_mod.F90 index 5f1975eb1..776c14343 100644 --- a/streams/dshr_stream_mod.F90 +++ b/streams/dshr_stream_mod.F90 @@ -110,7 +110,7 @@ module dshr_stream_mod end type shr_stream_streamType !----- parameters ----- - integer , save :: debug = 0 ! edit/turn-on for debug write statements + integer :: debug = 0 ! edit/turn-on for debug write statements real(R8) , parameter :: spd = shr_const_cday ! seconds per day character(*) , parameter :: u_FILE_u = & __FILE__ @@ -129,19 +129,23 @@ subroutine shr_stream_init_from_xml(xmlfilename, streamdat, mastertask, logunit, ! ! ! - ! - ! mesh_filename - ! - ! - ! /glade/p/cesmdata/cseg/inputdata/atm/datm7/NYF/nyf.ncep.T62.050923.nc - ! ..... - ! - ! - ! u_10 u - ! - ! - ! 0 - ! + ! + ! + ! + ! + ! + ! + ! + ! + ! + ! + ! + ! + ! + ! + ! + ! + ! ! ! ! --------------------------------------------------------------------- @@ -163,6 +167,7 @@ subroutine shr_stream_init_from_xml(xmlfilename, streamdat, mastertask, logunit, integer :: status integer :: tmp(6) real(r8) :: rtmp(1) + character(*),parameter :: subName = '(shr_stream_init_from_xml) ' ! -------------------------------------------------------- rc = ESMF_SUCCESS @@ -332,8 +337,12 @@ subroutine shr_stream_init_from_xml(xmlfilename, streamdat, mastertask, logunit, streamdat(i)%pio_iotype = shr_pio_getiotype(trim(compname)) streamdat(i)%pio_ioformat = shr_pio_getioformat(trim(compname)) call shr_stream_getCalendar(streamdat(i), 1, streamdat(i)%calendar) - enddo + ! Error check + if (trim(streamdat(i)%taxmode) == shr_stream_taxis_extend .and. streamdat(i)%dtlimit < 1.e10) then + call shr_sys_abort(trim(subName)//" ERROR: if taxmode value is extend set dtlimit to 1.e30") + end if + enddo ! Set logunit streamdat(:)%logunit = logunit @@ -341,7 +350,6 @@ subroutine shr_stream_init_from_xml(xmlfilename, streamdat, mastertask, logunit, ! initialize flag that stream has been set streamdat(:)%init = .true. - end subroutine shr_stream_init_from_xml !=============================================================================== From 317c8ae5ab3f52d2e14c897415c5b060e598a8e3 Mon Sep 17 00:00:00 2001 From: Mariana Vertenstein Date: Sat, 1 Aug 2020 14:07:54 -0600 Subject: [PATCH 011/153] first changes for 3d input capability --- streams/dshr_strdata_mod.F90 | 238 ++++++++++++++++++++++++++--------- streams/dshr_stream_mod.F90 | 51 +++++--- 2 files changed, 216 insertions(+), 73 deletions(-) diff --git a/streams/dshr_strdata_mod.F90 b/streams/dshr_strdata_mod.F90 index 7821351f0..efadfd657 100644 --- a/streams/dshr_strdata_mod.F90 +++ b/streams/dshr_strdata_mod.F90 @@ -6,7 +6,7 @@ module dshr_strdata_mod use ESMF use shr_kind_mod , only : r8=>shr_kind_r8, r4=>shr_kind_r4, i2=>shr_kind_I2 - use shr_kind_mod , only : cs=>shr_kind_cs, cl=>shr_kind_cl, cxx=>shr_kind_cxx + use shr_kind_mod , only : cs=>shr_kind_cs, cl=>shr_kind_cl, cxx=>shr_kind_cxx use shr_sys_mod , only : shr_sys_abort use shr_const_mod , only : shr_const_pi, shr_const_cDay, shr_const_spval use shr_cal_mod , only : shr_cal_calendarname, shr_cal_timeSet @@ -29,7 +29,7 @@ module dshr_strdata_mod use pio , only : pio_openfile, pio_closefile, pio_nowrite use pio , only : pio_seterrorhandling, pio_initdecomp, pio_freedecomp use pio , only : pio_inquire, pio_inq_varid, pio_inq_varndims, pio_inq_vardimid - use pio , only : pio_inq_dimlen, pio_inq_vartype, pio_inq_dimname + use pio , only : pio_inq_dimlen, pio_inq_vartype, pio_inq_dimname, pio_inq_dimid use pio , only : pio_double, pio_real, pio_int, pio_offset_kind, pio_get_var use pio , only : pio_read_darray, pio_setframe, pio_fill_double, pio_get_att use pio , only : PIO_BCAST_ERROR, PIO_RETURN_ERROR, PIO_NOERR, PIO_INTERNAL_ERROR, PIO_SHORT @@ -50,6 +50,7 @@ module dshr_strdata_mod public :: shr_strdata_get_stream_fieldbundle private :: shr_strdata_init_model_domain private :: shr_strdata_readLBUB + private :: shr_strdata_get_stream_nlevs ! public data members: integer :: debug = 0 ! local debug flag @@ -67,6 +68,7 @@ module dshr_strdata_mod type(ESMF_RouteHandle) :: routehandle ! stream n -> model mesh mapping character(CL), allocatable :: fldlist_stream(:) ! names of stream file fields character(CL), allocatable :: fldlist_model(:) ! names of stream model fields + integer :: stream_nlev ! number of vertical levels in stream integer :: stream_lb ! index of the Lowerbound (LB) in fldlist_stream integer :: stream_ub ! index of the Upperbound (UB) in fldlist_stream type(ESMF_Field) :: field_stream ! a field on the stream data domain @@ -213,7 +215,7 @@ subroutine shr_strdata_init_from_inline(sdat, my_task, logunit, compname, model_ type(shr_strdata_type) , intent(inout) :: sdat ! stream data type integer , intent(in) :: my_task ! my mpi task integer , intent(in) :: logunit ! stdout logunit - character(len=*) , intent(in) :: compname ! component name (e.g. ATM, OCN, ...) + character(len=*) , intent(in) :: compname ! component name (e.g. ATM, OCN, ...) type(ESMF_Clock) , intent(in) :: model_clock ! model clock type(ESMF_Mesh) , intent(in) :: model_mesh ! model mesh character(*) , intent(in) :: stream_meshFile ! full pathname to stream mesh file @@ -406,7 +408,6 @@ subroutine shr_strdata_init(sdat, model_clock, rc) allocate(sdat%pstrm(ns)%fldList_model(nvars)) call shr_stream_getModelFieldList(sdat%stream(ns), sdat%pstrm(ns)%fldlist_model) - allocate(sdat%pstrm(ns)%fldlist_stream(nvars)) call shr_stream_getStreamFieldList(sdat%stream(ns), sdat%pstrm(ns)%fldlist_stream) @@ -416,32 +417,59 @@ subroutine shr_strdata_init(sdat, model_clock, rc) sdat%pstrm(ns)%stream_ub = 2 allocate(sdat%pstrm(ns)%fldbun_data(2)) else if(sdat%stream(ns)%readmode=='full_file') then + ! TODO: add this in + endif + ! set ungridded dimension to the number of vertical level - must read this in + call shr_strdata_get_stream_nlev(sdat, ns, sdat%pstrm(ns)%stream_nlev, rc=rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return - endif + ! create temporary fields on model mesh and add the fields to the field bundle do i=1,size(sdat%pstrm(ns)%fldbun_data) sdat%pstrm(ns)%fldbun_data(i) = ESMF_FieldBundleCreate(rc=rc) ! stream mesh enddo - sdat%pstrm(ns)%fldbun_model = ESMF_FieldBundleCreate(rc=rc) ! time interpolation on model mesh + sdat%pstrm(ns)%fldbun_model = ESMF_FieldBundleCreate(rc=rc) ! time interpolation on model mesh do nfld = 1, nvars - ! create temporary fields on model mesh and add the fields to the field bundle do i=1,size(sdat%pstrm(ns)%fldbun_data) - lfield = ESMF_FieldCreate(sdat%model_mesh, ESMF_TYPEKIND_r8, name=trim(sdat%pstrm(ns)%fldlist_model(nfld)), & - meshloc=ESMF_MESHLOC_ELEMENT, rc=rc) + if (sdat%pstrm(ns)%stream_nlev > 1) then + lfield = ESMF_FieldCreate(sdat%model_mesh, ESMF_TYPEKIND_r8, & + name=trim(sdat%pstrm(ns)%fldlist_model(nfld)), & + ungriddedLbound=(/1/), ungriddedUbound=(/sdat%pstrm(ns)%stream_nlev/), gridToFieldMap=(/2/), & + meshloc=ESMF_MESHLOC_ELEMENT, rc=rc) + else + lfield = ESMF_FieldCreate(sdat%model_mesh, ESMF_TYPEKIND_r8, & + name=trim(sdat%pstrm(ns)%fldlist_model(nfld)), & + meshloc=ESMF_MESHLOC_ELEMENT, rc=rc) + end if call ESMF_FieldBundleAdd(sdat%pstrm(ns)%fldbun_data(i), (/lfield/), rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return enddo - lfield = ESMF_FieldCreate(sdat%model_mesh, ESMF_TYPEKIND_r8, name=trim(sdat%pstrm(ns)%fldlist_model(nfld)), & - meshloc=ESMF_MESHLOC_ELEMENT, rc=rc) - call ESMF_FieldBundleAdd(sdat%pstrm(ns)%fldbun_model , (/lfield/), rc=rc) + if (sdat%pstrm(ns)%stream_nlev > 1) then + lfield = ESMF_FieldCreate(sdat%model_mesh, ESMF_TYPEKIND_r8, & + ungriddedLbound=(/1/), ungriddedUbound=(/sdat%pstrm(ns)%stream_nlev/), gridToFieldMap=(/2/), & + name=trim(sdat%pstrm(ns)%fldlist_model(nfld)), & + meshloc=ESMF_MESHLOC_ELEMENT, rc=rc) + else + lfield = ESMF_FieldCreate(sdat%model_mesh, ESMF_TYPEKIND_r8, & + name=trim(sdat%pstrm(ns)%fldlist_model(nfld)), & + meshloc=ESMF_MESHLOC_ELEMENT, rc=rc) + end if + call ESMF_FieldBundleAdd(sdat%pstrm(ns)%fldbun_model, (/lfield/), rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return end do - ! Create a field on the model mesh for coszen time interpolation for this stream if needed if (trim(sdat%stream(ns)%tinterpalgo) == 'coszen') then - sdat%pstrm(ns)%field_coszen = ESMF_FieldCreate(sdat%model_mesh, ESMF_TYPEKIND_r8, name='tavCosz', & - meshloc=ESMF_MESHLOC_ELEMENT, rc=rc) + if (sdat%pstrm(ns)%stream_nlev > 1) then + sdat%pstrm(ns)%field_coszen = ESMF_FieldCreate(sdat%model_mesh, ESMF_TYPEKIND_r8, & + name='tavCosz', & + ungriddedLbound=(/1/), ungriddedUbound=(/sdat%pstrm(ns)%stream_nlev/), gridToFieldMap=(/2/), & + meshloc=ESMF_MESHLOC_ELEMENT, rc=rc) + else + sdat%pstrm(ns)%field_coszen = ESMF_FieldCreate(sdat%model_mesh, ESMF_TYPEKIND_r8, & + name='tavCosz', & + meshloc=ESMF_MESHLOC_ELEMENT, rc=rc) + end if endif ! ------------------------------------ @@ -452,10 +480,19 @@ subroutine shr_strdata_init(sdat, model_clock, rc) ! assume that all fields in a stream share the same mesh and there is only a unique model mesh ! can do this outside of a stream loop by just using the first stream index if(ESMF_MeshIsCreated(sdat%pstrm(ns)%stream_mesh)) then - sdat%pstrm(ns)%field_stream = ESMF_FieldCreate(sdat%pstrm(ns)%stream_mesh, & - ESMF_TYPEKIND_r8, meshloc=ESMF_MESHLOC_ELEMENT, rc=rc) - if (chkerr(rc,__LINE__,u_FILE_u)) return + + if (sdat%pstrm(ns)%stream_nlev > 1) then + sdat%pstrm(ns)%field_stream = ESMF_FieldCreate(sdat%pstrm(ns)%stream_mesh, & + ungriddedLbound=(/1/), ungriddedUbound=(/sdat%pstrm(ns)%stream_nlev/), gridToFieldMap=(/2/), & + ESMF_TYPEKIND_r8, meshloc=ESMF_MESHLOC_ELEMENT, rc=rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + else + sdat%pstrm(ns)%field_stream = ESMF_FieldCreate(sdat%pstrm(ns)%stream_mesh, & + ESMF_TYPEKIND_r8, meshloc=ESMF_MESHLOC_ELEMENT, rc=rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + end if endif + call dshr_fldbun_getFieldN(sdat%pstrm(ns)%fldbun_data(sdat%pstrm(ns)%stream_lb), 1, lfield_dst, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return @@ -494,6 +531,11 @@ subroutine shr_strdata_init(sdat, model_clock, rc) do m = 1,shr_strdata_get_stream_count(sdat) ! check that vector field list is a valid colon delimited string if (trim(sdat%stream(m)%stream_vectors) /= 'null') then + ! check that for now u and v are only for single leve fields + if (sdat%pstrm(ns)%stream_nlev > 1) then + ! TODO: add support for u and v for multi level fields + call shr_sys_abort(subname//': vector fields are not currently supported for multi-level fields') + end if ! check that stream vector names are valid if (.not. shr_string_listIsValid(sdat%stream(m)%stream_vectors)) then write(sdat%logunit,*) trim(subname),' vec fldlist invalid m=',m,trim(sdat%stream(m)%stream_vectors) @@ -532,6 +574,49 @@ subroutine shr_strdata_init(sdat, model_clock, rc) endif end subroutine shr_strdata_init + !=============================================================================== + subroutine shr_strdata_get_stream_nlev(sdat, stream_index, nlev_dimname, nlev, rc) + + ! Obtain the number of vertical levels in the stream + + ! input/output variables + type(shr_strdata_type) , intent(inout) :: sdat + integer , intent(in) :: stream_index + integer , intent(out) :: nlev + integer , intent(out) :: rc + + ! local variables + type(ESMF_VM) :: vm + type(file_desc_t) :: pioid + integer :: rcode + character(CL) :: filename + type(io_desc_t) :: pio_iodesc + integer :: dimid + character(*), parameter :: subname = '(shr_strdata_set_stream_domain) ' + ! ---------------------------------------------- + + rc = ESMF_SUCCESS + + if (trim(sdat%stream(stream_index)%nlev_dimname) == 'null') then + nlev = 1 + else + ! Determine the file to open + if (sdat%masterproc) then + call shr_stream_getData(sdat%stream(stream_index), 1, filename) + end if + call ESMF_VMGetCurrent(vm, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call ESMF_VMBroadCast(vm, filename, CL, 0, rc=rc) + + ! Open the file and determine the vertical dimension size + rcode = pio_openfile(sdat%pio_subsystem, pioid, sdat%io_type, trim(filename), pio_nowrite) + rcode = pio_inq_dimid(pioid, trim(sdat%stream(stream_index)%nlev_dimname), dimid) + rcode = pio_inq_dimlen(pioid, dimid, nlev) + call pio_closefile(pioid) + end if + + end subroutine shr_strdata_get_stream_nlev + !=============================================================================== subroutine shr_strdata_get_stream_domain(sdat, stream_index, fldname, flddata, rc) @@ -573,7 +658,8 @@ subroutine shr_strdata_get_stream_domain(sdat, stream_index, fldname, flddata, r ! Create the pio iodesc for fldname call shr_strdata_set_stream_iodesc(sdat, sdat%pio_subsystem, pioid, & - trim(fldname), sdat%pstrm(stream_index)%stream_mesh, pio_iodesc, rc=rc) + trim(fldname), sdat%pstrm(stream_index)%stream_mesh, sdat%pstrm(stream_index)%stream_nlev, & + pio_iodesc, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return ! Now read in the data for fldname @@ -699,15 +785,13 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) logical :: checkflag = .false. integer :: npes integer :: my_task + integer :: nstreams real(r8) ,parameter :: solZenMin = 0.001_r8 ! minimum solar zenith angle integer ,parameter :: tadj = 2 character(len=*) ,parameter :: timname = "_strd_adv" character(*) ,parameter :: subname = "(shr_strdata_advance) " character(*) ,parameter :: F00 = "('(shr_strdata_advance) ',a)" character(*) ,parameter :: F01 = "('(shr_strdata_advance) ',a,a,i4,2(f10.5,2x))" - real(r8), pointer :: dataptr_temp1(:) - real(r8), pointer :: dataptr_temp2(:) - integer :: nstreams !------------------------------------------------------------------------------- rc = ESMF_SUCCESS @@ -809,21 +893,27 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) call shr_cal_timeSet(timeUB,sdat%pstrm(ns)%ymdUB,0,sdat%stream(ns)%calendar,rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return timeint = timeUB-timeLB - call ESMF_TimeIntervalGet(timeint,StartTimeIn=timeLB,d=dday) + call ESMF_TimeIntervalGet(timeint, StartTimeIn=timeLB, d=dday) if (ChkErr(rc,__LINE__,u_FILE_u)) return dtime = abs(real(dday,r8) + real(sdat%pstrm(ns)%todUB-sdat%pstrm(ns)%todLB,r8)/shr_const_cDay) sdat%pstrm(ns)%dtmin = min(sdat%pstrm(ns)%dtmin,dtime) sdat%pstrm(ns)%dtmax = max(sdat%pstrm(ns)%dtmax,dtime) + if ((sdat%pstrm(ns)%dtmax/sdat%pstrm(ns)%dtmin) > sdat%stream(ns)%dtlimit) then if (sdat%masterproc) then - write(sdat%logunit,*) trim(subname),' ERROR: for stream ',n - write(sdat%logunit,*) trim(subName),' ERROR: dt limit1 ',& - sdat%pstrm(ns)%dtmax, sdat%pstrm(ns)%dtmin, sdat%stream(ns)%dtlimit - write(sdat%logunit,*) trim(subName),' ERROR: dt limit2 ',& + write(sdat%logunit,*) trim(subname),' ERROR: for stream ',ns + write(sdat%logunit,*) trim(subName),' ERROR: dtime, dtmax, dtmin, dtlimit = ',& + dtime, sdat%pstrm(ns)%dtmax, sdat%pstrm(ns)%dtmin, sdat%stream(ns)%dtlimit + write(sdat%logunit,*) trim(subName),' ERROR: ymdLB, todLB, ymdUB, todUB = ', & sdat%pstrm(ns)%ymdLB, sdat%pstrm(ns)%todLB, sdat%pstrm(ns)%ymdUB, sdat%pstrm(ns)%todUB end if - call shr_sys_abort(trim(subName)//' ERROR dt limit for stream') + write(6,*) trim(subname),' ERROR: for stream ',ns + write(6,*) trim(subName),' ERROR: dtime, dtmax, dtmin, dtlimit = ',& + dtime, sdat%pstrm(ns)%dtmax, sdat%pstrm(ns)%dtmin, sdat%stream(ns)%dtlimit + write(6,*) trim(subName),' ERROR: ymdLB, todLB, ymdUB, todUB = ', & + sdat%pstrm(ns)%ymdLB, sdat%pstrm(ns)%todLB, sdat%pstrm(ns)%ymdUB, sdat%pstrm(ns)%todUB + call shr_sys_abort(trim(subName)//' ERROR dt limit for stream, see atm.log output') endif endif @@ -1367,6 +1457,7 @@ subroutine shr_strdata_readstrm(sdat, ns, stream, stream_mesh, & elseif(associated(dataptr2d_src) .and. trim(fldlist_model(nf)) .eq. vname) then dataptr2d_src(2,:) = dataptr(:) else if (pio_iodesc_set) then + ! Regrid the field_stream read in to the model mesh call ESMF_FieldRegrid(sdat%pstrm(ns)%field_stream, field_dst, routehandle=sdat%pstrm(ns)%routehandle, & termorderflag=ESMF_TERMORDER_SRCSEQ, checkflag=.false., zeroregion=ESMF_REGION_TOTAL, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return @@ -1439,34 +1530,36 @@ end subroutine shr_strdata_readstrm !=============================================================================== subroutine shr_strdata_set_stream_iodesc(sdat, & - pio_subsystem, pioid, fldname, stream_mesh, pio_iodesc, rc) + pio_subsystem, pioid, fldname, stream_mesh, stream_nlev, pio_iodesc, rc) ! input/output variables - type(shr_strdata_type) , intent(in) :: sdat - type(iosystem_desc_t) , intent(inout), target :: pio_subsystem - type(file_desc_t) , intent(inout) :: pioid - character(len=*) , intent(in) :: fldname - type(ESMF_Mesh) , intent(in) :: stream_mesh - type(io_desc_t) , intent(inout) :: pio_iodesc - integer , intent(out) :: rc + type(shr_strdata_type) , intent(in) :: sdat + type(iosystem_desc_t) , intent(inout), target :: pio_subsystem + type(file_desc_t) , intent(inout) :: pioid + character(len=*) , intent(in) :: fldname + type(ESMF_Mesh) , intent(in) :: stream_mesh + integer , intent(in) :: stream_nlev + type(io_desc_t) , intent(inout) :: pio_iodesc + integer , intent(out) :: rc ! local variables - integer :: pio_iovartype - integer :: n - type(var_desc_t) :: varid - integer :: ndims - integer, allocatable :: dimids(:) - integer, allocatable :: dimlens(:) - integer :: unlimdid - type(ESMF_DistGrid) :: distGrid - integer :: lsize - integer, pointer :: compdof(:) => null() - character(CS) :: dimname - integer :: rCode ! pio return code (only used when pio error handling is PIO_BCAST_ERROR) - character(*), parameter :: subname = '(shr_strdata_set_stream_iodesc) ' - character(*), parameter :: F00 = "('(shr_strdata_set_stream_iodesc) ',a,i8,2x,i8,2x,a)" - character(*), parameter :: F01 = "('(shr_strdata_set_stream_iodesc) ',a,i8,2x,i8,2x,a)" - character(*), parameter :: F02 = "('(shr_strdata_set_stream_iodesc) ',a,i8,2x,i8,2x,i8,2x,a)" + integer :: pio_iovartype + integer :: n, m, cnt + type(var_desc_t) :: varid + integer :: ndims + integer, allocatable :: dimids(:) + integer, allocatable :: dimlens(:) + integer :: unlimdid + type(ESMF_DistGrid) :: distGrid + integer :: lsize + integer, pointer :: compdof(:) => null() + integer, pointer :: compdof3d(:) => null() + character(CS) :: dimname + integer :: rCode ! pio return code (only used when pio error handling is PIO_BCAST_ERROR) + character(*), parameter :: subname = '(shr_strdata_set_stream_iodesc) ' + character(*), parameter :: F00 = "('(shr_strdata_set_stream_iodesc) ',a,i8,2x,i8,2x,a)" + character(*), parameter :: F01 = "('(shr_strdata_set_stream_iodesc) ',a,i8,2x,i8,2x,a)" + character(*), parameter :: F02 = "('(shr_strdata_set_stream_iodesc) ',a,i8,2x,i8,2x,i8,2x,a)" !------------------------------------------------------------------------------- integer :: old_error_handle @@ -1506,30 +1599,61 @@ subroutine shr_strdata_set_stream_iodesc(sdat, & ' variable had no time dimension ' end if call pio_initdecomp(pio_subsystem, pio_iovartype, (/dimlens(1),dimlens(2)/), compdof, pio_iodesc) + else if (ndims == 3) then rcode = pio_inq_dimname(pioid, dimids(ndims), dimname) - if (trim(dimname) == 'time' .or. trim(dimname) == 'nt') then + if (stream_nlev > 1) then + write(sdat%logunit,F01) 'setting iodesc for : '//trim(fldname)// & + ' with dimlens(1), dimlens(2), dimlens(3) = ',dimlens(1),dimlens(2), dimlens(3), & + ' variable had no time dimension '//trim(dimname) + allocate(compdof3d(lsize*stream_nlev)) + cnt = 0 + do m = 1,size(compdof) + do n = 1,stream_nlev + cnt = cnt + 1 + compdof3d(cnt) = (compdof(m)-1)*stream_nlev + n + enddo + enddo + call pio_initdecomp(pio_subsystem, pio_iovartype, (/dimlens(1),dimlens(2),dimlens(3)/), compdof3d, pio_iodesc) + else if (trim(dimname) == 'time' .or. trim(dimname) == 'nt') then if (sdat%masterproc) then write(sdat%logunit,F01) 'setting iodesc for : '//trim(fldname)// & ' with dimlens(1), dimlens(2) = ',dimlens(1),dimlens(2),& ' variable had time dimension '//trim(dimname) end if call pio_initdecomp(pio_subsystem, pio_iovartype, (/dimlens(1),dimlens(2)/), compdof, pio_iodesc) - else + end if + + else if (ndims == 4) then + rcode = pio_inq_dimname(pioid, dimids(ndims), dimname) + if (stream_nlev > 1 .and. (trim(dimname) == 'time' .or. trim(dimname) == 'nt') then if (sdat%masterproc) then write(sdat%logunit,F02) 'setting iodesc for : '//trim(fldname)// & ' with dimlens(1), dimlens(2),dimlens(3) = ',dimlens(1),dimlens(2),dimlens(3),& - ' variable had no time dimension ' + ' variable had time dimension ' + allocate(compdof3d(lsize*stream_nlev)) + cnt = 0 + do m = 1,size(compdof) + do n = 1,stream_nlev + cnt = cnt + 1 + compdof3d(cnt) = (compdof(m)-1)*stream_nlev + n + enddo + enddo end if call pio_initdecomp(pio_subsystem, pio_iovartype, (/dimlens(1),dimlens(2),dimlens(3)/), compdof, pio_iodesc) + else + write(6,*)'ERROR: dimlens= ',dimlens + call shr_sys_abort(trim(subname)//' dimlens = 4 assumes a time dimension') end if + else write(6,*)'ERROR: dimlens= ',dimlens - call shr_sys_abort(trim(subname)//' only ndims of 2 and 3 are currently supported') + call shr_sys_abort(trim(subname)//' only ndims of 2 and 3 and 4 are currently supported') end if -! call pio_seterrorhandling(pioid, old_error_handle) + ! call pio_seterrorhandling(pioid, old_error_handle) deallocate(compdof) + if (allocated(compdof3d)) deallocate(compdof3d) deallocate(dimids) deallocate(dimlens) diff --git a/streams/dshr_stream_mod.F90 b/streams/dshr_stream_mod.F90 index 5f1975eb1..0427ee9c9 100644 --- a/streams/dshr_stream_mod.F90 +++ b/streams/dshr_stream_mod.F90 @@ -86,6 +86,7 @@ module dshr_stream_mod integer :: yearFirst = -1 ! first year to use in t-axis (yyyymmdd) integer :: yearLast = -1 ! last year to use in t-axis (yyyymmdd) integer :: yearAlign = -1 ! align yearFirst with this model year + character(CS) :: lev_dimname = 'null' ! name of vertical dimension if any character(CS) :: taxMode = shr_stream_taxis_cycle ! cycling option for time axis character(CS) :: tInterpAlgo = 'linear' ! algorithm to use for time interpolation character(CS) :: mapalgo = 'bilinear' ! type of mapping - default is 'bilinear' @@ -110,7 +111,7 @@ module dshr_stream_mod end type shr_stream_streamType !----- parameters ----- - integer , save :: debug = 0 ! edit/turn-on for debug write statements + integer :: debug = 0 ! edit/turn-on for debug write statements real(R8) , parameter :: spd = shr_const_cday ! seconds per day character(*) , parameter :: u_FILE_u = & __FILE__ @@ -129,19 +130,24 @@ subroutine shr_stream_init_from_xml(xmlfilename, streamdat, mastertask, logunit, ! ! ! - ! - ! mesh_filename - ! - ! - ! /glade/p/cesmdata/cseg/inputdata/atm/datm7/NYF/nyf.ncep.T62.050923.nc - ! ..... - ! - ! - ! u_10 u - ! - ! - ! 0 - ! + ! + ! + ! + ! + ! + ! + ! + ! + ! + ! + ! + ! + ! + ! + ! + ! + ! + ! ! ! ! --------------------------------------------------------------------- @@ -163,6 +169,7 @@ subroutine shr_stream_init_from_xml(xmlfilename, streamdat, mastertask, logunit, integer :: status integer :: tmp(6) real(r8) :: rtmp(1) + character(*),parameter :: subName = '(shr_stream_init_from_xml) ' ! -------------------------------------------------------- rc = ESMF_SUCCESS @@ -241,6 +248,13 @@ subroutine shr_stream_init_from_xml(xmlfilename, streamdat, mastertask, logunit, call shr_sys_abort("stream vectors must be provided") endif + p => item(getElementsByTagname(streamnode, "stream_lev_dimname"), 0) + if (associated(p)) then + call extractDataContent(p, streamdat(i)%lev_dimname) + else + call shr_sys_abort("stream vertical level dimension name must be provided") + endif + p => item(getElementsByTagname(streamnode, "stream_data_files"), 0) if (.not. associated(p)) then call shr_sys_abort("stream data files must be provided") @@ -313,6 +327,8 @@ subroutine shr_stream_init_from_xml(xmlfilename, streamdat, mastertask, logunit, enddo call ESMF_VMBroadCast(vm, streamdat(i)%meshfile, CL, 0, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return + call ESMF_VMBroadCast(vm, streamdat(i)%lev_dimname, CS, 0, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return call ESMF_VMBroadCast(vm, streamdat(i)%taxmode, CS, 0, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return call ESMF_VMBroadCast(vm, streamdat(i)%readmode, CS, 0, rc=rc) @@ -332,8 +348,12 @@ subroutine shr_stream_init_from_xml(xmlfilename, streamdat, mastertask, logunit, streamdat(i)%pio_iotype = shr_pio_getiotype(trim(compname)) streamdat(i)%pio_ioformat = shr_pio_getioformat(trim(compname)) call shr_stream_getCalendar(streamdat(i), 1, streamdat(i)%calendar) - enddo + ! Error check + if (trim(streamdat(i)%taxmode) == shr_stream_taxis_extend .and. streamdat(i)%dtlimit < 1.e10) then + call shr_sys_abort(trim(subName)//" ERROR: if taxmode value is extend set dtlimit to 1.e30") + end if + enddo ! Set logunit streamdat(:)%logunit = logunit @@ -341,7 +361,6 @@ subroutine shr_stream_init_from_xml(xmlfilename, streamdat, mastertask, logunit, ! initialize flag that stream has been set streamdat(:)%init = .true. - end subroutine shr_stream_init_from_xml !=============================================================================== From 13a27088ac1e74315eab677b21c25f7a5373193a Mon Sep 17 00:00:00 2001 From: Mariana Vertenstein Date: Sun, 2 Aug 2020 10:34:56 -0600 Subject: [PATCH 012/153] updates to have DLND compset working and bfb --- dlnd/cime_config/namelist_definition_dlnd.xml | 10 ++ streams/dshr_strdata_mod.F90 | 101 ++++++++++-------- 2 files changed, 66 insertions(+), 45 deletions(-) diff --git a/dlnd/cime_config/namelist_definition_dlnd.xml b/dlnd/cime_config/namelist_definition_dlnd.xml index faa840bda..e68516932 100644 --- a/dlnd/cime_config/namelist_definition_dlnd.xml +++ b/dlnd/cime_config/namelist_definition_dlnd.xml @@ -68,6 +68,16 @@ + + char + streams + streams_file + Stream domain file directory. + + null + + + char streams diff --git a/streams/dshr_strdata_mod.F90 b/streams/dshr_strdata_mod.F90 index efadfd657..41adf2778 100644 --- a/streams/dshr_strdata_mod.F90 +++ b/streams/dshr_strdata_mod.F90 @@ -45,12 +45,13 @@ module dshr_strdata_mod public :: shr_strdata_advance public :: shr_strdata_get_stream_domain ! public since needed by dshr_mod public :: shr_strdata_get_stream_pointer ! get a pointer into a stream's fldbun_model field bundle - public :: shr_strdata_print public :: shr_strdata_get_stream_count public :: shr_strdata_get_stream_fieldbundle + public :: shr_strdata_print + private :: shr_strdata_init_model_domain + private :: shr_strdata_get_stream_nlev private :: shr_strdata_readLBUB - private :: shr_strdata_get_stream_nlevs ! public data members: integer :: debug = 0 ! local debug flag @@ -205,7 +206,6 @@ subroutine shr_strdata_init_from_xml(sdat, xmlfilename, model_mesh, clock, compn end subroutine shr_strdata_init_from_xml - !=============================================================================== subroutine shr_strdata_init_from_inline(sdat, my_task, logunit, compname, model_clock, model_mesh,& stream_meshfile, stream_mapalgo, stream_filenames, stream_fldlistFile, stream_fldListModel, & @@ -342,6 +342,7 @@ subroutine shr_strdata_init(sdat, model_clock, rc) type(ESMF_DistGrid) :: distgrid type(ESMF_RegridMethod_Flag) :: regridmethod type(ESMF_PoleMethod_Flag) :: polemethod + type(ESMF_Mesh), pointer :: stream_mesh character(CS) :: calendar ! calendar name integer :: dimcount integer, allocatable :: minIndexPTile(:,:) @@ -371,7 +372,8 @@ subroutine shr_strdata_init(sdat, model_clock, rc) type(ESMF_VM) :: vm logical :: masterproc integer :: nvars - integer :: i + integer :: i, stream_nlev + character(CL) :: stream_vectors character(len=*), parameter :: subname='(shr_strdata_mod:shr_sdat_init)' character(*) , parameter :: F00 = "('(shr_sdat_init) ',a)" character(*) , parameter :: F01 = "('(shr_sdat) ',a,2x,i8)" @@ -391,6 +393,9 @@ subroutine shr_strdata_init(sdat, model_clock, rc) ! TODO: add functionality if the stream mesh needs to be created from a grid call shr_stream_getMeshFileName (sdat%stream(ns), filename) + stream_mesh => sdat%pstrm(ns)%stream_mesh + stream_nlev = sdat%pstrm(ns)%stream_nlev + if (filename /= 'none' .and. masterproc) then inquire(file=trim(filename),exist=fileExists) if (.not. fileExists) then @@ -399,7 +404,7 @@ subroutine shr_strdata_init(sdat, model_clock, rc) end if endif if(filename /= 'none') then - sdat%pstrm(ns)%stream_mesh = ESMF_MeshCreate(trim(filename), fileformat=ESMF_FILEFORMAT_ESMFMESH, rc=rc) + stream_mesh = ESMF_MeshCreate(trim(filename), fileformat=ESMF_FILEFORMAT_ESMFMESH, rc=rc) endif if (ChkErr(rc,__LINE__,u_FILE_u)) return @@ -421,7 +426,7 @@ subroutine shr_strdata_init(sdat, model_clock, rc) endif ! set ungridded dimension to the number of vertical level - must read this in - call shr_strdata_get_stream_nlev(sdat, ns, sdat%pstrm(ns)%stream_nlev, rc=rc) + call shr_strdata_get_stream_nlev(sdat, ns, stream_nlev, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return ! create temporary fields on model mesh and add the fields to the field bundle @@ -434,7 +439,7 @@ subroutine shr_strdata_init(sdat, model_clock, rc) if (sdat%pstrm(ns)%stream_nlev > 1) then lfield = ESMF_FieldCreate(sdat%model_mesh, ESMF_TYPEKIND_r8, & name=trim(sdat%pstrm(ns)%fldlist_model(nfld)), & - ungriddedLbound=(/1/), ungriddedUbound=(/sdat%pstrm(ns)%stream_nlev/), gridToFieldMap=(/2/), & + ungriddedLbound=(/1/), ungriddedUbound=(/stream_nlev/), gridToFieldMap=(/2/), & meshloc=ESMF_MESHLOC_ELEMENT, rc=rc) else lfield = ESMF_FieldCreate(sdat%model_mesh, ESMF_TYPEKIND_r8, & @@ -444,9 +449,9 @@ subroutine shr_strdata_init(sdat, model_clock, rc) call ESMF_FieldBundleAdd(sdat%pstrm(ns)%fldbun_data(i), (/lfield/), rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return enddo - if (sdat%pstrm(ns)%stream_nlev > 1) then + if (stream_nlev > 1) then lfield = ESMF_FieldCreate(sdat%model_mesh, ESMF_TYPEKIND_r8, & - ungriddedLbound=(/1/), ungriddedUbound=(/sdat%pstrm(ns)%stream_nlev/), gridToFieldMap=(/2/), & + ungriddedLbound=(/1/), ungriddedUbound=(/stream_nlev/), gridToFieldMap=(/2/), & name=trim(sdat%pstrm(ns)%fldlist_model(nfld)), & meshloc=ESMF_MESHLOC_ELEMENT, rc=rc) else @@ -460,10 +465,10 @@ subroutine shr_strdata_init(sdat, model_clock, rc) ! Create a field on the model mesh for coszen time interpolation for this stream if needed if (trim(sdat%stream(ns)%tinterpalgo) == 'coszen') then - if (sdat%pstrm(ns)%stream_nlev > 1) then + if (stream_nlev > 1) then sdat%pstrm(ns)%field_coszen = ESMF_FieldCreate(sdat%model_mesh, ESMF_TYPEKIND_r8, & name='tavCosz', & - ungriddedLbound=(/1/), ungriddedUbound=(/sdat%pstrm(ns)%stream_nlev/), gridToFieldMap=(/2/), & + ungriddedLbound=(/1/), ungriddedUbound=(/stream_nlev/), gridToFieldMap=(/2/), & meshloc=ESMF_MESHLOC_ELEMENT, rc=rc) else sdat%pstrm(ns)%field_coszen = ESMF_FieldCreate(sdat%model_mesh, ESMF_TYPEKIND_r8, & @@ -479,15 +484,16 @@ subroutine shr_strdata_init(sdat, model_clock, rc) ! create the source and destination fields needed to create the route handles ! assume that all fields in a stream share the same mesh and there is only a unique model mesh ! can do this outside of a stream loop by just using the first stream index - if(ESMF_MeshIsCreated(sdat%pstrm(ns)%stream_mesh)) then + if(ESMF_MeshIsCreated(stream_mesh)) then - if (sdat%pstrm(ns)%stream_nlev > 1) then - sdat%pstrm(ns)%field_stream = ESMF_FieldCreate(sdat%pstrm(ns)%stream_mesh, & - ungriddedLbound=(/1/), ungriddedUbound=(/sdat%pstrm(ns)%stream_nlev/), gridToFieldMap=(/2/), & - ESMF_TYPEKIND_r8, meshloc=ESMF_MESHLOC_ELEMENT, rc=rc) + if (stream_nlev > 1) then + sdat%pstrm(ns)%field_stream = ESMF_FieldCreate(stream_mesh, & + ESMF_TYPEKIND_r8, meshloc=ESMF_MESHLOC_ELEMENT, & + ungriddedLbound=(/1/), ungriddedUbound=(/stream_nlev/), gridToFieldMap=(/2/), & + rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return else - sdat%pstrm(ns)%field_stream = ESMF_FieldCreate(sdat%pstrm(ns)%stream_mesh, & + sdat%pstrm(ns)%field_stream = ESMF_FieldCreate(stream_mesh, & ESMF_TYPEKIND_r8, meshloc=ESMF_MESHLOC_ELEMENT, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return end if @@ -528,29 +534,32 @@ subroutine shr_strdata_init(sdat, model_clock, rc) end do ! end of loop over streams ! Check for vector pairs in the stream - BOTH ucomp and vcomp MUST BE IN THE SAME STREAM - do m = 1,shr_strdata_get_stream_count(sdat) + do ns = 1,shr_strdata_get_stream_count(sdat) + stream_mesh => sdat%pstrm(ns)%stream_mesh + stream_nlev = sdat%pstrm(ns)%stream_nlev + stream_vectors = trim(sdat%stream(ns)%stream_vectors) + ! check that vector field list is a valid colon delimited string - if (trim(sdat%stream(m)%stream_vectors) /= 'null') then + if (trim(stream_vectors) /= 'null') then ! check that for now u and v are only for single leve fields - if (sdat%pstrm(ns)%stream_nlev > 1) then + if (stream_nlev > 1) then ! TODO: add support for u and v for multi level fields call shr_sys_abort(subname//': vector fields are not currently supported for multi-level fields') end if ! check that stream vector names are valid - if (.not. shr_string_listIsValid(sdat%stream(m)%stream_vectors)) then - write(sdat%logunit,*) trim(subname),' vec fldlist invalid m=',m,trim(sdat%stream(m)%stream_vectors) - call shr_sys_abort(subname//': vec fldlist invalid:'//trim(sdat%stream(m)%stream_vectors)) + if (.not. shr_string_listIsValid(stream_vectors)) then + write(sdat%logunit,*) trim(subname),' vec fldlist invalid m=',m,trim(stream_vectors) + call shr_sys_abort(subname//': vec fldlist invalid:'//trim(stream_vectors)) endif ! check that only 2 fields are contained for any vector pairing - if (shr_string_listGetNum(sdat%stream(m)%stream_vectors) /= 2) then - write(sdat%logunit,*) trim(subname),' vec fldlist ne 2 m=',m,trim(sdat%stream(m)%stream_vectors) - call shr_sys_abort(subname//': vec fldlist ne 2:'//trim(sdat%stream(m)%stream_vectors)) + if (shr_string_listGetNum(stream_vectors) /= 2) then + write(sdat%logunit,*) trim(subname),' vec fldlist ne 2 m=',m,trim(stream_vectors) + call shr_sys_abort(subname//': vec fldlist ne 2:'//trim(stream_vectors)) endif ! create stream vector field - sdat%pstrm(m)%stream_vector = ESMF_FieldCreate(sdat%pstrm(m)%stream_mesh, & - ESMF_TYPEKIND_r8, name='stream_vector', & - ungriddedLbound=(/1/), ungriddedUbound=(/2/), & - gridToFieldMap=(/2/), meshloc=ESMF_MESHLOC_ELEMENT, rc=rc) + sdat%pstrm(ns)%stream_vector = ESMF_FieldCreate(stream_mesh, & + ESMF_TYPEKIND_r8, name='stream_vector', meshloc=ESMF_MESHLOC_ELEMENT, & + ungriddedLbound=(/1/), ungriddedUbound=(/2/), gridToFieldMap=(/2/), rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return end if enddo @@ -575,14 +584,14 @@ subroutine shr_strdata_init(sdat, model_clock, rc) end subroutine shr_strdata_init !=============================================================================== - subroutine shr_strdata_get_stream_nlev(sdat, stream_index, nlev_dimname, nlev, rc) + subroutine shr_strdata_get_stream_nlev(sdat, stream_index, nlev, rc) ! Obtain the number of vertical levels in the stream ! input/output variables type(shr_strdata_type) , intent(inout) :: sdat integer , intent(in) :: stream_index - integer , intent(out) :: nlev + integer , intent(out) :: nlev integer , intent(out) :: rc ! local variables @@ -597,7 +606,7 @@ subroutine shr_strdata_get_stream_nlev(sdat, stream_index, nlev_dimname, nlev, r rc = ESMF_SUCCESS - if (trim(sdat%stream(stream_index)%nlev_dimname) == 'null') then + if (trim(sdat%stream(stream_index)%lev_dimname) == 'null') then nlev = 1 else ! Determine the file to open @@ -610,7 +619,7 @@ subroutine shr_strdata_get_stream_nlev(sdat, stream_index, nlev_dimname, nlev, r ! Open the file and determine the vertical dimension size rcode = pio_openfile(sdat%pio_subsystem, pioid, sdat%io_type, trim(filename), pio_nowrite) - rcode = pio_inq_dimid(pioid, trim(sdat%stream(stream_index)%nlev_dimname), dimid) + rcode = pio_inq_dimid(pioid, trim(sdat%stream(stream_index)%lev_dimname), dimid) rcode = pio_inq_dimlen(pioid, dimid, nlev) call pio_closefile(pioid) end if @@ -1135,7 +1144,7 @@ subroutine shr_strdata_readLBUB(sdat, ns, mDate, mSec, newData, istr, rc) integer :: oDateUB,oSecUB,dDateUB real(r8) :: rDateM,rDateLB,rDateUB ! model,LB,UB dates with fractional days integer :: n_lb, n_ub - integer :: i + integer :: i, stream_nlev character(CL) :: filename_lb character(CL) :: filename_ub character(CL) :: filename_next @@ -1148,6 +1157,7 @@ subroutine shr_strdata_readLBUB(sdat, ns, mDate, mSec, newData, istr, rc) rc = ESMF_SUCCESS stream => sdat%stream(ns) stream_mesh => sdat%pstrm(ns)%stream_mesh + stream_nlev = sdat%pstrm(ns)%stream_nlev call t_startf(trim(istr)//'_setup') ! allocate streamdat instance on all tasks @@ -1192,7 +1202,7 @@ subroutine shr_strdata_readLBUB(sdat, ns, mDate, mSec, newData, istr, rc) sdat%pstrm(ns)%stream_lb = i else ! read lower bound of data - call shr_strdata_readstrm(sdat, ns, stream, stream_mesh, & + call shr_strdata_readstrm(sdat, ns, stream, stream_mesh, stream_nlev, & sdat%pstrm(ns)%fldlist_stream, sdat%pstrm(ns)%fldlist_model, & sdat%pstrm(ns)%fldbun_data(sdat%pstrm(ns)%stream_lb), & sdat%pio_subsystem, sdat%io_type, sdat%pstrm(ns)%stream_pio_iodesc_set, sdat%pstrm(ns)%stream_pio_iodesc, & @@ -1203,7 +1213,7 @@ subroutine shr_strdata_readLBUB(sdat, ns, mDate, mSec, newData, istr, rc) if (sdat%pstrm(ns)%ymdUB /= oDateUB .or. sdat%pstrm(ns)%todUB /= oSecUB) then newdata = .true. - call shr_strdata_readstrm(sdat, ns, stream, stream_mesh, & + call shr_strdata_readstrm(sdat, ns, stream, stream_mesh, stream_nlev, & sdat%pstrm(ns)%fldlist_stream, sdat%pstrm(ns)%fldlist_model, & sdat%pstrm(ns)%fldbun_data(sdat%pstrm(ns)%stream_ub), & sdat%pio_subsystem, sdat%io_type, sdat%pstrm(ns)%stream_pio_iodesc_set, sdat%pstrm(ns)%stream_pio_iodesc, & @@ -1226,22 +1236,23 @@ subroutine shr_strdata_readLBUB(sdat, ns, mDate, mSec, newData, istr, rc) end subroutine shr_strdata_readLBUB !=============================================================================== - subroutine shr_strdata_readstrm(sdat, ns, stream, stream_mesh, & + subroutine shr_strdata_readstrm(sdat, ns, stream, stream_mesh, stream_nlev, & fldlist_stream, fldlist_model, fldbun_model, & pio_subsystem, pio_iotype, pio_iodesc_set, pio_iodesc, & filename, nt, istr, boundstr, rc) - use shr_const_mod , only : r8fill => SHR_CONST_SPVAL - use shr_infnan_mod , only : shr_infnan_isnan - ! Read the stream data and initialize the strea pio_iodesc the first time ! the stream is read + use shr_const_mod , only : r8fill => SHR_CONST_SPVAL + use shr_infnan_mod , only : shr_infnan_isnan + ! input/output variables type(shr_strdata_type) , intent(inout) :: sdat ! strdata data data-type integer , intent(in) :: ns ! current stream index type(shr_stream_streamType) , intent(inout) :: stream type(ESMF_Mesh) , intent(in) :: stream_mesh + integer , intent(in) :: stream_nlev character(len=*) , intent(in) :: fldlist_stream(:) character(len=*) , intent(in) :: fldlist_model(:) type(ESMF_FieldBundle) , intent(inout) :: fldbun_model @@ -1321,7 +1332,7 @@ subroutine shr_strdata_readstrm(sdat, ns, stream, stream_mesh, & if (ESMF_MeshIsCreated(stream_mesh)) then if(.not. pio_iodesc_set) then call shr_strdata_set_stream_iodesc(sdat, pio_subsystem, pioid, & - trim(fldlist_stream(1)), stream_mesh, pio_iodesc, rc=rc) + trim(fldlist_stream(1)), stream_mesh, stream_nlev, pio_iodesc, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return pio_iodesc_set = .true. endif @@ -1553,7 +1564,7 @@ subroutine shr_strdata_set_stream_iodesc(sdat, & type(ESMF_DistGrid) :: distGrid integer :: lsize integer, pointer :: compdof(:) => null() - integer, pointer :: compdof3d(:) => null() + integer, pointer :: compdof3d(:) => null() character(CS) :: dimname integer :: rCode ! pio return code (only used when pio error handling is PIO_BCAST_ERROR) character(*), parameter :: subname = '(shr_strdata_set_stream_iodesc) ' @@ -1626,7 +1637,7 @@ subroutine shr_strdata_set_stream_iodesc(sdat, & else if (ndims == 4) then rcode = pio_inq_dimname(pioid, dimids(ndims), dimname) - if (stream_nlev > 1 .and. (trim(dimname) == 'time' .or. trim(dimname) == 'nt') then + if (stream_nlev > 1 .and. (trim(dimname) == 'time' .or. trim(dimname) == 'nt')) then if (sdat%masterproc) then write(sdat%logunit,F02) 'setting iodesc for : '//trim(fldname)// & ' with dimlens(1), dimlens(2),dimlens(3) = ',dimlens(1),dimlens(2),dimlens(3),& @@ -1653,7 +1664,7 @@ subroutine shr_strdata_set_stream_iodesc(sdat, & ! call pio_seterrorhandling(pioid, old_error_handle) deallocate(compdof) - if (allocated(compdof3d)) deallocate(compdof3d) + if (associated(compdof3d)) deallocate(compdof3d) deallocate(dimids) deallocate(dimlens) From e7b49582469f6ff419e515bd5e4bd27bf3b0d3e1 Mon Sep 17 00:00:00 2001 From: uturuncoglu Date: Tue, 4 Aug 2020 13:37:55 -0600 Subject: [PATCH 013/153] fix for fldptr return mode --- datm/datm_datamode_era5_mod.F90 | 8 +++++--- streams/dshr_methods_mod.F90 | 27 ++++++++++++++++++--------- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/datm/datm_datamode_era5_mod.F90 b/datm/datm_datamode_era5_mod.F90 index e19201fe2..977d9f5d2 100644 --- a/datm/datm_datamode_era5_mod.F90 +++ b/datm/datm_datamode_era5_mod.F90 @@ -153,7 +153,7 @@ subroutine datm_datamode_era5_init_pointers(exportState, sdat, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return call dshr_state_getfldptr(exportState, 'Sa_v' , fldptr1=Sa_v , rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call dshr_state_getfldptr(exportState, 'Sa_wspd' , fldptr1=Sa_wspd , rc=rc) + call dshr_state_getfldptr(exportState, 'Sa_wspd' , fldptr1=Sa_wspd , allowNullReturn=.true., rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return call dshr_state_getfldptr(exportState, 'Sa_tbot' , fldptr1=Sa_tbot , rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return @@ -187,7 +187,7 @@ subroutine datm_datamode_era5_init_pointers(exportState, sdat, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return call dshr_state_getfldptr(exportState, 'Faxa_swdn' , fldptr1=Faxa_swdn , rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call dshr_state_getfldptr(exportState, 'Faxa_lwnet' , fldptr1=Faxa_lwnet , rc=rc) + call dshr_state_getfldptr(exportState, 'Faxa_lwnet' , fldptr1=Faxa_lwnet , allowNullReturn=.true., rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return call dshr_state_getfldptr(exportState, 'Faxa_lwdn' , fldptr1=Faxa_lwdn , rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return @@ -296,7 +296,9 @@ subroutine datm_datamode_era5_advance(exportstate, masterproc, logunit, mpicom, ! convert J/m^2 to W/m^2 Faxa_lwdn(:) = Faxa_lwdn(:)/3600.0_r8 - Faxa_lwnet(:) = Faxa_lwnet(:)/3600.0_r8 + if (associated(Faxa_lwnet)) then + Faxa_lwnet(:) = Faxa_lwnet(:)/3600.0_r8 + end if Faxa_swdn(:) = Faxa_swdn(:)/3600.0_r8 Faxa_swvdr(:) = Faxa_swvdr(:)/3600.0_r8 Faxa_swndr(:) = Faxa_swndr(:)/3600.0_r8 diff --git a/streams/dshr_methods_mod.F90 b/streams/dshr_methods_mod.F90 index e3ecf8266..565bd748f 100644 --- a/streams/dshr_methods_mod.F90 +++ b/streams/dshr_methods_mod.F90 @@ -30,7 +30,7 @@ module dshr_methods_mod contains !=============================================================================== - subroutine dshr_state_getfldptr(State, fldname, fldptr1, fldptr2, rc) + subroutine dshr_state_getfldptr(State, fldname, fldptr1, fldptr2, allowNullReturn, rc) ! ---------------------------------------------- ! Get pointer to a state field @@ -41,6 +41,7 @@ subroutine dshr_state_getfldptr(State, fldname, fldptr1, fldptr2, rc) character(len=*) , intent(in) :: fldname real(R8) , pointer, intent(inout), optional :: fldptr1(:) real(R8) , pointer, intent(inout), optional :: fldptr2(:,:) + logical , intent(in),optional :: allowNullReturn integer , intent(out) :: rc ! local variables @@ -51,19 +52,27 @@ subroutine dshr_state_getfldptr(State, fldname, fldptr1, fldptr2, rc) rc = ESMF_SUCCESS - call ESMF_StateGet(State, itemSearch=trim(fldname), itemCount=itemCount, rc=rc) - if (chkerr(rc,__LINE__,u_FILE_u)) return + if (present(allowNullReturn)) then + call ESMF_StateGet(State, itemSearch=trim(fldname), itemCount=itemCount, rc=rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return - ! check field is in the state or not? - if (itemCount >= 1) then + ! check field is in the state or not? + if (itemCount >= 1) then + call ESMF_StateGet(State, itemName=trim(fldname), field=lfield, rc=rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + + call dshr_field_getfldptr(lfield, fldptr1=fldptr1, fldptr2=fldptr2, rc=rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + else + ! the call to just returns if it cannot find the field + call ESMF_LogWrite(trim(subname)//" Could not find the field: "//trim(fldname)//" just returning", ESMF_LOGMSG_INFO) + end if + else call ESMF_StateGet(State, itemName=trim(fldname), field=lfield, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return call dshr_field_getfldptr(lfield, fldptr1=fldptr1, fldptr2=fldptr2, rc=rc) - if (chkerr(rc,__LINE__,u_FILE_u)) return - else - ! the call to just returns if it cannot find the field - call ESMF_LogWrite(trim(subname)//" Could not find the field: "//trim(fldname)//" just returning", ESMF_LOGMSG_INFO) + if (chkerr(rc,__LINE__,u_FILE_u)) return end if end subroutine dshr_state_getfldptr From cb472769b70a6e99a0a8afb1b735f8758824a5ec Mon Sep 17 00:00:00 2001 From: Mariana Vertenstein Date: Tue, 4 Aug 2020 21:01:47 -0600 Subject: [PATCH 014/153] addition of 3d functionality --- datm/cime_config/namelist_definition_datm.xml | 10 + dice/cime_config/namelist_definition_dice.xml | 10 + docn/cime_config/namelist_definition_docn.xml | 10 + drof/cime_config/namelist_definition_drof.xml | 10 + dwav/cime_config/namelist_definition_dwav.xml | 10 + streams/dshr_strdata_mod.F90 | 692 ++++++++++++------ streams/dshr_stream_mod.F90 | 25 +- 7 files changed, 540 insertions(+), 227 deletions(-) diff --git a/datm/cime_config/namelist_definition_datm.xml b/datm/cime_config/namelist_definition_datm.xml index 751fc6e47..0db53a53d 100644 --- a/datm/cime_config/namelist_definition_datm.xml +++ b/datm/cime_config/namelist_definition_datm.xml @@ -359,6 +359,16 @@ + + char + streams + streams_file + Stream domain file directory. + + null + + + char streams diff --git a/dice/cime_config/namelist_definition_dice.xml b/dice/cime_config/namelist_definition_dice.xml index 86e4b24d2..2d2f38875 100644 --- a/dice/cime_config/namelist_definition_dice.xml +++ b/dice/cime_config/namelist_definition_dice.xml @@ -82,6 +82,16 @@ + + char + streams + streams_file + Stream domain file directory. + + null + + + char streams diff --git a/docn/cime_config/namelist_definition_docn.xml b/docn/cime_config/namelist_definition_docn.xml index 345ade59e..297048f2a 100644 --- a/docn/cime_config/namelist_definition_docn.xml +++ b/docn/cime_config/namelist_definition_docn.xml @@ -171,6 +171,16 @@ + + char + streams + streams_file + Stream domain file directory. + + null + + + char streams diff --git a/drof/cime_config/namelist_definition_drof.xml b/drof/cime_config/namelist_definition_drof.xml index ae6e31960..ffb397594 100644 --- a/drof/cime_config/namelist_definition_drof.xml +++ b/drof/cime_config/namelist_definition_drof.xml @@ -115,6 +115,16 @@ + + char + streams + streams_file + Stream domain file directory. + + null + + + char streams diff --git a/dwav/cime_config/namelist_definition_dwav.xml b/dwav/cime_config/namelist_definition_dwav.xml index 7f72aad34..5f5604310 100644 --- a/dwav/cime_config/namelist_definition_dwav.xml +++ b/dwav/cime_config/namelist_definition_dwav.xml @@ -70,6 +70,16 @@ + + char + streams + streams_file + Stream domain file directory. + + null + + + char streams diff --git a/streams/dshr_strdata_mod.F90 b/streams/dshr_strdata_mod.F90 index 41adf2778..6ad900583 100644 --- a/streams/dshr_strdata_mod.F90 +++ b/streams/dshr_strdata_mod.F90 @@ -53,6 +53,11 @@ module dshr_strdata_mod private :: shr_strdata_get_stream_nlev private :: shr_strdata_readLBUB + interface shr_strdata_get_stream_pointer + module procedure shr_strdata_get_stream_pointer_1d + module procedure shr_strdata_get_stream_pointer_2d + end interface shr_strdata_get_stream_pointer + ! public data members: integer :: debug = 0 ! local debug flag character(len=*) ,parameter, public :: shr_strdata_nullstr = 'null' @@ -207,9 +212,12 @@ subroutine shr_strdata_init_from_xml(sdat, xmlfilename, model_mesh, clock, compn end subroutine shr_strdata_init_from_xml !=============================================================================== - subroutine shr_strdata_init_from_inline(sdat, my_task, logunit, compname, model_clock, model_mesh,& - stream_meshfile, stream_mapalgo, stream_filenames, stream_fldlistFile, stream_fldListModel, & - stream_yearFirst, stream_yearLast, stream_yearAlign, stream_offset, stream_taxmode, rc) + subroutine shr_strdata_init_from_inline(sdat, my_task, logunit, compname, & + model_clock, model_mesh, & + stream_meshfile, stream_lev_dimname, stream_mapalgo, & + stream_filenames, stream_fldlistFile, stream_fldListModel, & + stream_yearFirst, stream_yearLast, stream_yearAlign, & + stream_offset, stream_taxmode, stream_dtlimit, stream_tintalgo, rc) ! input/output variables type(shr_strdata_type) , intent(inout) :: sdat ! stream data type @@ -219,6 +227,7 @@ subroutine shr_strdata_init_from_inline(sdat, my_task, logunit, compname, model_ type(ESMF_Clock) , intent(in) :: model_clock ! model clock type(ESMF_Mesh) , intent(in) :: model_mesh ! model mesh character(*) , intent(in) :: stream_meshFile ! full pathname to stream mesh file + character(*) , intent(in) :: stream_lev_dimname ! name of vertical dimension in stream character(*) , intent(in) :: stream_mapalgo ! stream mesh -> model mesh mapping type character(*) , intent(in) :: stream_filenames(:) ! stream data filenames (full pathnamesa) character(*) , intent(in) :: stream_fldListFile(:) ! file field names, colon delim list @@ -228,6 +237,8 @@ subroutine shr_strdata_init_from_inline(sdat, my_task, logunit, compname, model_ integer , intent(in) :: stream_yearAlign ! align yearFirst with this model year integer , intent(in) :: stream_offset ! offset in seconds of stream data character(*) , intent(in) :: stream_taxMode ! time axis mode + real(r8) , intent(in) :: stream_dtlimit ! ratio of max/min stream delta times + character(*) , intent(in) :: stream_tintalgo ! time interpolation algorithm integer , intent(out) :: rc ! error code ! ---------------------------------------------- @@ -251,9 +262,12 @@ subroutine shr_strdata_init_from_inline(sdat, my_task, logunit, compname, model_ if (ChkErr(rc,__LINE__,u_FILE_u)) return ! Initialize sdat stream - ASSUME only 1 stream - call shr_stream_init_from_inline(sdat%stream, stream_meshfile, stream_mapalgo, & - stream_yearFirst, stream_yearLast, stream_yearAlign, stream_offset, stream_taxmode, & - stream_fldlistFile, stream_fldListModel, stream_fileNames, logunit, trim(compname)) + call shr_stream_init_from_inline(sdat%stream, & + stream_meshfile, stream_lev_dimname, stream_mapalgo, & + stream_yearFirst, stream_yearLast, stream_yearAlign, & + stream_offset, stream_taxmode, stream_tintalgo, stream_dtlimit, & + stream_fldlistFile, stream_fldListModel, stream_fileNames, & + logunit, trim(compname)) ! Now finish initializing sdat call shr_strdata_init(sdat, model_clock, rc) @@ -372,7 +386,7 @@ subroutine shr_strdata_init(sdat, model_clock, rc) type(ESMF_VM) :: vm logical :: masterproc integer :: nvars - integer :: i, stream_nlev + integer :: i, stream_nlev, index character(CL) :: stream_vectors character(len=*), parameter :: subname='(shr_strdata_mod:shr_sdat_init)' character(*) , parameter :: F00 = "('(shr_sdat_init) ',a)" @@ -381,21 +395,23 @@ subroutine shr_strdata_init(sdat, model_clock, rc) ! ---------------------------------------------- rc = ESMF_SUCCESS + call ESMF_VmGetCurrent(vm, rc=rc) call ESMF_VMGet(vm, localpet=localPet, rc=rc) - masterproc= localPet==master_task + masterproc= (localPet==master_task) + ! Loop over streams do ns = 1,shr_strdata_get_stream_count(sdat) + ! Initialize calendar for stream n call ESMF_VMBroadCast(vm, sdat%stream(ns)%calendar, CS, 0, rc=rc) + ! Set pointer for stream_mesh + stream_mesh => sdat%pstrm(ns)%stream_mesh + ! Create the target stream mesh from the stream mesh file ! TODO: add functionality if the stream mesh needs to be created from a grid call shr_stream_getMeshFileName (sdat%stream(ns), filename) - - stream_mesh => sdat%pstrm(ns)%stream_mesh - stream_nlev = sdat%pstrm(ns)%stream_nlev - if (filename /= 'none' .and. masterproc) then inquire(file=trim(filename),exist=fileExists) if (.not. fileExists) then @@ -408,9 +424,14 @@ subroutine shr_strdata_init(sdat, model_clock, rc) endif if (ChkErr(rc,__LINE__,u_FILE_u)) return + ! Determine the number of stream levels + call shr_strdata_get_stream_nlev(sdat, ns, rc=rc) + stream_nlev = sdat%pstrm(ns)%stream_nlev + ! Determine field names for stream fields with both stream file names and data model names nvars = sdat%stream(ns)%nvars + ! Allocate memory allocate(sdat%pstrm(ns)%fldList_model(nvars)) call shr_stream_getModelFieldList(sdat%stream(ns), sdat%pstrm(ns)%fldlist_model) allocate(sdat%pstrm(ns)%fldlist_stream(nvars)) @@ -425,15 +446,10 @@ subroutine shr_strdata_init(sdat, model_clock, rc) ! TODO: add this in endif - ! set ungridded dimension to the number of vertical level - must read this in - call shr_strdata_get_stream_nlev(sdat, ns, stream_nlev, rc=rc) - if (chkerr(rc,__LINE__,u_FILE_u)) return - - ! create temporary fields on model mesh and add the fields to the field bundle + ! create spatially interpolated (but not time interpolated) field bundle - fldbun_data array do i=1,size(sdat%pstrm(ns)%fldbun_data) sdat%pstrm(ns)%fldbun_data(i) = ESMF_FieldBundleCreate(rc=rc) ! stream mesh enddo - sdat%pstrm(ns)%fldbun_model = ESMF_FieldBundleCreate(rc=rc) ! time interpolation on model mesh do nfld = 1, nvars do i=1,size(sdat%pstrm(ns)%fldbun_data) if (sdat%pstrm(ns)%stream_nlev > 1) then @@ -449,6 +465,12 @@ subroutine shr_strdata_init(sdat, model_clock, rc) call ESMF_FieldBundleAdd(sdat%pstrm(ns)%fldbun_data(i), (/lfield/), rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return enddo + end do + + ! Create spatially and time interpolated field bundle - fldbun_model + sdat%pstrm(ns)%fldbun_model = ESMF_FieldBundleCreate(rc=rc) ! time interpolation on model mesh + do nfld = 1, nvars + ! create temporary fields on model mesh and add the fields to the field bundle if (stream_nlev > 1) then lfield = ESMF_FieldCreate(sdat%model_mesh, ESMF_TYPEKIND_r8, & ungriddedLbound=(/1/), ungriddedUbound=(/stream_nlev/), gridToFieldMap=(/2/), & @@ -485,7 +507,6 @@ subroutine shr_strdata_init(sdat, model_clock, rc) ! assume that all fields in a stream share the same mesh and there is only a unique model mesh ! can do this outside of a stream loop by just using the first stream index if(ESMF_MeshIsCreated(stream_mesh)) then - if (stream_nlev > 1) then sdat%pstrm(ns)%field_stream = ESMF_FieldCreate(stream_mesh, & ESMF_TYPEKIND_r8, meshloc=ESMF_MESHLOC_ELEMENT, & @@ -499,7 +520,10 @@ subroutine shr_strdata_init(sdat, model_clock, rc) end if endif - call dshr_fldbun_getFieldN(sdat%pstrm(ns)%fldbun_data(sdat%pstrm(ns)%stream_lb), 1, lfield_dst, rc=rc) + ! TODO: why not just use fldbun_model rather than fldbun_data + + index = sdat%pstrm(ns)%stream_lb + call dshr_fldbun_getFieldN(sdat%pstrm(ns)%fldbun_data(index), 1, lfield_dst, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return if (trim(sdat%stream(ns)%mapalgo) == "bilinear") then @@ -584,14 +608,14 @@ subroutine shr_strdata_init(sdat, model_clock, rc) end subroutine shr_strdata_init !=============================================================================== - subroutine shr_strdata_get_stream_nlev(sdat, stream_index, nlev, rc) + subroutine shr_strdata_get_stream_nlev(sdat, stream_index, rc) - ! Obtain the number of vertical levels in the stream + ! Obtain the number of vertical levels for the stream - this is obtained + ! from the lev_dimname string ! input/output variables type(shr_strdata_type) , intent(inout) :: sdat integer , intent(in) :: stream_index - integer , intent(out) :: nlev integer , intent(out) :: rc ! local variables @@ -599,30 +623,34 @@ subroutine shr_strdata_get_stream_nlev(sdat, stream_index, nlev, rc) type(file_desc_t) :: pioid integer :: rcode character(CL) :: filename - type(io_desc_t) :: pio_iodesc integer :: dimid + integer :: stream_nlev character(*), parameter :: subname = '(shr_strdata_set_stream_domain) ' ! ---------------------------------------------- rc = ESMF_SUCCESS + ! Set ungridded dimension to the number of vertical level - must read this in if (trim(sdat%stream(stream_index)%lev_dimname) == 'null') then - nlev = 1 + stream_nlev = 1 else - ! Determine the file to open + call ESMF_VMGetCurrent(vm, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return if (sdat%masterproc) then call shr_stream_getData(sdat%stream(stream_index), 1, filename) end if - call ESMF_VMGetCurrent(vm, rc=rc) - if (ChkErr(rc,__LINE__,u_FILE_u)) return call ESMF_VMBroadCast(vm, filename, CL, 0, rc=rc) - - ! Open the file and determine the vertical dimension size rcode = pio_openfile(sdat%pio_subsystem, pioid, sdat%io_type, trim(filename), pio_nowrite) rcode = pio_inq_dimid(pioid, trim(sdat%stream(stream_index)%lev_dimname), dimid) - rcode = pio_inq_dimlen(pioid, dimid, nlev) + rcode = pio_inq_dimlen(pioid, dimid, stream_nlev) call pio_closefile(pioid) end if + if (sdat%masterproc) then + write(sdat%logunit,*) trim(subname)//' stream_nlev = ',stream_nlev + end if + + ! Set stream_nlev in the per-stream sdat info + sdat%pstrm(stream_index)%stream_nlev = stream_nlev end subroutine shr_strdata_get_stream_nlev @@ -666,9 +694,7 @@ subroutine shr_strdata_get_stream_domain(sdat, stream_index, fldname, flddata, r rcode = pio_openfile(sdat%pio_subsystem, pioid, sdat%io_type, trim(filename), pio_nowrite) ! Create the pio iodesc for fldname - call shr_strdata_set_stream_iodesc(sdat, sdat%pio_subsystem, pioid, & - trim(fldname), sdat%pstrm(stream_index)%stream_mesh, sdat%pstrm(stream_index)%stream_nlev, & - pio_iodesc, rc=rc) + call shr_strdata_set_stream_iodesc(sdat, sdat%pstrm(stream_index), trim(fldname), pioid, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return ! Now read in the data for fldname @@ -751,23 +777,26 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) integer ,intent(out) :: rc ! local variables - integer :: ns !stream index + integer :: ns ! stream index integer :: nf ! field index - integer :: m ! vector index - integer :: n,i ! generic indices - integer :: ierr - integer :: nu,nv - integer :: lsize - logical , allocatable :: newData(:) + integer :: m ! vector loop index + integer :: n,i,l ! generic indices + integer :: ierr ! error status + integer :: nu,nv ! vector indices + integer :: lsize ! local size + logical , allocatable :: newData(:) ! read in new data if true integer , allocatable :: ymdmod(:) ! modified model dates to handle Feb 29 real(r8), allocatable :: coszen(:) ! cosine of zenith angle integer :: todmod ! modified model dates to handle Feb 29 character(len=32) :: lstr ! local string logical :: ltimers ! local logical for timers real(r8) :: flb,fub ! factor for lb and ub - real(r8) ,pointer :: dataptr(:) ! pointer into field bundle - real(r8) ,pointer :: dataptr_lb(:) ! pointer into field bundle - real(r8) ,pointer :: dataptr_ub(:) ! pointer into field bundle + real(r8) ,pointer :: dataptr1d(:) ! pointer into field bundle + real(r8) ,pointer :: dataptr1d_lb(:) ! pointer into field bundle + real(r8) ,pointer :: dataptr1d_ub(:) ! pointer into field bundle + real(r8) ,pointer :: dataptr2d(:,:) ! pointer into field bundle + real(r8) ,pointer :: dataptr2d_lb(:,:)! pointer into field bundle + real(r8) ,pointer :: dataptr2d_ub(:,:)! pointer into field bundle real(r8), pointer :: nu_coords(:) ! allocatable local element mesh lat and lons real(r8), pointer :: nv_coords(:) ! allocatable local element mesh lat and lons real(r8), pointer :: data2d_src(:,:) ! pointer into field bundle @@ -794,7 +823,7 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) logical :: checkflag = .false. integer :: npes integer :: my_task - integer :: nstreams + integer :: nstreams, stream_index real(r8) ,parameter :: solZenMin = 0.001_r8 ! minimum solar zenith angle integer ,parameter :: tadj = 2 character(len=*) ,parameter :: timname = "_strd_adv" @@ -805,9 +834,12 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) rc = ESMF_SUCCESS - nullify(dataptr) - nullify(dataptr_ub) - nullify(dataptr_lb) + nullify(dataptr1d) + nullify(dataptr1d_ub) + nullify(dataptr1d_lb) + nullify(dataptr2d) + nullify(dataptr2d_ub) + nullify(dataptr2d_lb) nullify(nu_coords) nullify(nv_coords) nullify(data2d_src) @@ -938,6 +970,9 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) if (trim(sdat%stream(ns)%tinterpalgo) == 'coszen') then + ! Determine stream lower bound index + stream_index = sdat%pstrm(ns)%stream_lb + ! ------------------------------------------ ! time interpolation method is coszen ! ------------------------------------------ @@ -967,19 +1002,35 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) ! compute time interperpolate value - LB data normalized with this factor: cosz/tavCosz do nf = 1,size(sdat%pstrm(ns)%fldlist_model) - call dshr_fldbun_getfldptr(sdat%pstrm(ns)%fldbun_model, & - sdat%pstrm(ns)%fldlist_model(nf), dataptr , rc=rc) - if (ChkErr(rc,__LINE__,u_FILE_u)) return - call dshr_fldbun_getfldptr(sdat%pstrm(ns)%fldbun_data(sdat%pstrm(ns)%stream_lb), & - sdat%pstrm(ns)%fldlist_model(nf), dataptr_lb, rc=rc) - if (ChkErr(rc,__LINE__,u_FILE_u)) return - do i = 1,size(dataptr) - if (coszen(i) > solZenMin) then - dataptr(i) = dataptr_lb(i)*coszen(i)/sdat%tavCoszen(i) - else - dataptr(i) = 0._r8 - endif - end do + if (sdat%pstrm(ns)%stream_nlev > 1) then + call dshr_fldbun_getfldptr(sdat%pstrm(ns)%fldbun_model, & + sdat%pstrm(ns)%fldlist_model(nf), fldptr2=dataptr2d, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_fldbun_getfldptr(sdat%pstrm(ns)%fldbun_data(stream_index), & + sdat%pstrm(ns)%fldlist_model(nf), fldptr2=dataptr2d_lb, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + do i = 1,size(dataptr2d,dim=2) + if (coszen(i) > solZenMin) then + dataptr2d(:,i) = dataptr2d_lb(:,i)*coszen(i)/sdat%tavCoszen(i) + else + dataptr2d(:,i) = 0._r8 + endif + end do + else + call dshr_fldbun_getfldptr(sdat%pstrm(ns)%fldbun_model, & + sdat%pstrm(ns)%fldlist_model(nf), fldptr1=dataptr1d, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_fldbun_getfldptr(sdat%pstrm(ns)%fldbun_data(stream_index), & + sdat%pstrm(ns)%fldlist_model(nf), fldptr1=dataptr1d_lb, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + do i = 1,size(dataptr1d) + if (coszen(i) > solZenMin) then + dataptr1d(i) = dataptr1d_lb(i)*coszen(i)/sdat%tavCoszen(i) + else + dataptr1d(i) = 0._r8 + endif + end do + end if end do deallocate(coszen) @@ -1000,18 +1051,32 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) if (debug > 0 .and. sdat%masterproc) then write(sdat%logunit,F01) trim(subname),' interp = ',ns,flb,fub endif - do nf = 1,size(sdat%pstrm(ns)%fldlist_model) - call dshr_fldbun_getfldptr(sdat%pstrm(ns)%fldbun_model, sdat%pstrm(ns)%fldlist_model(nf), dataptr, rc=rc) - if (ChkErr(rc,__LINE__,u_FILE_u)) return - call dshr_fldbun_getfldptr(sdat%pstrm(ns)%fldbun_data(sdat%pstrm(ns)%stream_lb), & - sdat%pstrm(ns)%fldlist_model(nf), dataptr_lb, rc=rc) - if (ChkErr(rc,__LINE__,u_FILE_u)) return - - call dshr_fldbun_getfldptr(sdat%pstrm(ns)%fldbun_data(sdat%pstrm(ns)%stream_ub), & - sdat%pstrm(ns)%fldlist_model(nf), dataptr_ub, rc=rc) - if (ChkErr(rc,__LINE__,u_FILE_u)) return - dataptr(:) = dataptr_lb(:) * flb + dataptr_ub(:) * fub + if (sdat%pstrm(ns)%stream_nlev > 1) then + call dshr_fldbun_getfldptr(sdat%pstrm(ns)%fldbun_model, & + sdat%pstrm(ns)%fldlist_model(nf), fldptr2=dataptr2d, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_fldbun_getfldptr(sdat%pstrm(ns)%fldbun_data(sdat%pstrm(ns)%stream_lb), & + sdat%pstrm(ns)%fldlist_model(nf), fldptr2=dataptr2d_lb, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_fldbun_getfldptr(sdat%pstrm(ns)%fldbun_data(sdat%pstrm(ns)%stream_ub), & + sdat%pstrm(ns)%fldlist_model(nf), fldptr2=dataptr2d_ub, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + do l = 1,sdat%pstrm(ns)%stream_nlev + dataptr2d(l,:) = dataptr2d_lb(l,:) * flb + dataptr2d_ub(l,:) * fub + end do + else + call dshr_fldbun_getfldptr(sdat%pstrm(ns)%fldbun_model, & + sdat%pstrm(ns)%fldlist_model(nf), fldptr1=dataptr1d, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_fldbun_getfldptr(sdat%pstrm(ns)%fldbun_data(sdat%pstrm(ns)%stream_lb), & + sdat%pstrm(ns)%fldlist_model(nf), fldptr1=dataptr1d_lb, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_fldbun_getfldptr(sdat%pstrm(ns)%fldbun_data(sdat%pstrm(ns)%stream_ub), & + sdat%pstrm(ns)%fldlist_model(nf), fldptr1=dataptr1d_ub, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + dataptr1d(:) = dataptr1d_lb(:) * flb + dataptr1d_ub(:) * fub + end if end do call t_stopf(trim(lstr)//trim(timname)//'_tint') @@ -1023,9 +1088,17 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) call t_startf(trim(lstr)//trim(timname)//'_zero') do nf = 1,size(sdat%pstrm(ns)%fldlist_model) - call dshr_fldbun_getfldptr(sdat%pstrm(ns)%fldbun_model, sdat%pstrm(ns)%fldlist_model(nf), dataptr, rc=rc) - if (ChkErr(rc,__LINE__,u_FILE_u)) return - dataptr(:) = 0._r8 + if (sdat%pstrm(ns)%stream_nlev > 1) then + call dshr_fldbun_getfldptr(sdat%pstrm(ns)%fldbun_model, & + sdat%pstrm(ns)%fldlist_model(nf), fldptr2=dataptr2d, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + dataptr2d(:,:) = 0._r8 + else + call dshr_fldbun_getfldptr(sdat%pstrm(ns)%fldbun_model, & + sdat%pstrm(ns)%fldlist_model(nf), fldptr1=dataptr1d, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + dataptr1d(:) = 0._r8 + end if end do call t_stopf(trim(lstr)//trim(timname)//'_zero') @@ -1144,7 +1217,7 @@ subroutine shr_strdata_readLBUB(sdat, ns, mDate, mSec, newData, istr, rc) integer :: oDateUB,oSecUB,dDateUB real(r8) :: rDateM,rDateLB,rDateUB ! model,LB,UB dates with fractional days integer :: n_lb, n_ub - integer :: i, stream_nlev + integer :: i character(CL) :: filename_lb character(CL) :: filename_ub character(CL) :: filename_next @@ -1157,7 +1230,6 @@ subroutine shr_strdata_readLBUB(sdat, ns, mDate, mSec, newData, istr, rc) rc = ESMF_SUCCESS stream => sdat%stream(ns) stream_mesh => sdat%pstrm(ns)%stream_mesh - stream_nlev = sdat%pstrm(ns)%stream_nlev call t_startf(trim(istr)//'_setup') ! allocate streamdat instance on all tasks @@ -1202,10 +1274,8 @@ subroutine shr_strdata_readLBUB(sdat, ns, mDate, mSec, newData, istr, rc) sdat%pstrm(ns)%stream_lb = i else ! read lower bound of data - call shr_strdata_readstrm(sdat, ns, stream, stream_mesh, stream_nlev, & - sdat%pstrm(ns)%fldlist_stream, sdat%pstrm(ns)%fldlist_model, & + call shr_strdata_readstrm(sdat, sdat%pstrm(ns), stream, & sdat%pstrm(ns)%fldbun_data(sdat%pstrm(ns)%stream_lb), & - sdat%pio_subsystem, sdat%io_type, sdat%pstrm(ns)%stream_pio_iodesc_set, sdat%pstrm(ns)%stream_pio_iodesc, & filename_lb, n_lb, istr=trim(istr)//'_LB', boundstr='lb', rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return end if @@ -1213,10 +1283,8 @@ subroutine shr_strdata_readLBUB(sdat, ns, mDate, mSec, newData, istr, rc) if (sdat%pstrm(ns)%ymdUB /= oDateUB .or. sdat%pstrm(ns)%todUB /= oSecUB) then newdata = .true. - call shr_strdata_readstrm(sdat, ns, stream, stream_mesh, stream_nlev, & - sdat%pstrm(ns)%fldlist_stream, sdat%pstrm(ns)%fldlist_model, & + call shr_strdata_readstrm(sdat, sdat%pstrm(ns), stream, & sdat%pstrm(ns)%fldbun_data(sdat%pstrm(ns)%stream_ub), & - sdat%pio_subsystem, sdat%io_type, sdat%pstrm(ns)%stream_pio_iodesc_set, sdat%pstrm(ns)%stream_pio_iodesc, & filename_ub, n_ub, istr=trim(istr)//'_UB', boundstr='ub', rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return endif @@ -1236,9 +1304,7 @@ subroutine shr_strdata_readLBUB(sdat, ns, mDate, mSec, newData, istr, rc) end subroutine shr_strdata_readLBUB !=============================================================================== - subroutine shr_strdata_readstrm(sdat, ns, stream, stream_mesh, stream_nlev, & - fldlist_stream, fldlist_model, fldbun_model, & - pio_subsystem, pio_iotype, pio_iodesc_set, pio_iodesc, & + subroutine shr_strdata_readstrm(sdat, per_stream, stream, fldbun_data, & filename, nt, istr, boundstr, rc) ! Read the stream data and initialize the strea pio_iodesc the first time @@ -1249,17 +1315,9 @@ subroutine shr_strdata_readstrm(sdat, ns, stream, stream_mesh, stream_nlev, & ! input/output variables type(shr_strdata_type) , intent(inout) :: sdat ! strdata data data-type - integer , intent(in) :: ns ! current stream index + type(shr_strdata_perstream) , intent(inout) :: per_stream type(shr_stream_streamType) , intent(inout) :: stream - type(ESMF_Mesh) , intent(in) :: stream_mesh - integer , intent(in) :: stream_nlev - character(len=*) , intent(in) :: fldlist_stream(:) - character(len=*) , intent(in) :: fldlist_model(:) - type(ESMF_FieldBundle) , intent(inout) :: fldbun_model - type(iosystem_desc_t) , intent(inout), target :: pio_subsystem - integer , intent(in) :: pio_iotype - logical , intent(inout) :: pio_iodesc_set - type(io_desc_t) , intent(inout) :: pio_iodesc + type(ESMF_FieldBundle) , intent(inout) :: fldbun_data character(len=*) , intent(in) :: filename integer , intent(in) :: nt character(len=*) , intent(in) :: istr @@ -1267,6 +1325,7 @@ subroutine shr_strdata_readstrm(sdat, ns, stream, stream_mesh, stream_nlev, & integer , intent(out) :: rc ! local variables + integer :: stream_nlev type(ESMF_Field) :: field_dst, vector_dst character(CL) :: currfile logical :: fileexists @@ -1275,23 +1334,34 @@ subroutine shr_strdata_readstrm(sdat, ns, stream, stream_mesh, stream_nlev, & type(var_desc_t) :: varid integer :: nf integer :: rCode - real(r4), allocatable :: data_real(:) real(r4) :: fillvalue_r4 real(r8) :: fillvalue_r8 logical :: handlefill = .false. integer :: old_error_handle - real(r8), pointer :: dataptr(:)=>null() - real(r8), pointer :: dataptr2d_src(:,:) => null(), dataptr2d_dst(:,:) => null() + real(r8), pointer :: dataptr(:) => null() + real(r8), pointer :: dataptr1d(:) => null() ! field bundle data + real(r8), pointer :: dataptr2d(:,:) => null() ! field bundle data + real(r8), pointer :: dataptr2d_src(:,:) => null() ! field bundle data + real(r8), pointer :: dataptr2d_dst(:,:) => null() ! field bundle data + real(r4), allocatable :: data_real1d(:) ! stream input data + real(r4), allocatable :: data_real2d(:,:) ! stream input data + real(r8), allocatable :: data_dbl1d(:) ! stream input data + real(r8), allocatable :: data_dbl2d(:,:) ! stream input data + integer(i2), allocatable :: data_short1d(:) ! stream input data + integer(i2), allocatable :: data_short2d(:,:) ! stream input data integer :: lsize, n integer :: spatialDim, numOwnedElements integer :: pio_iovartype - real(r8), pointer :: nv_coords(:), nu_coords(:), data_u_dst(:), data_v_dst(:) - real(r8) :: lat, lon, sinlat, sinlon, coslat, coslon + real(r8), pointer :: nv_coords(:), nu_coords(:) + real(r8), pointer :: data_u_dst(:), data_v_dst(:) + real(r8) :: lat, lon + real(r8) :: sinlat, sinlon + real(r8) :: coslat, coslon real(r8) :: scale_factor, add_offset integer(i2), allocatable :: data_short(:) integer(i2) :: fillvalue_i2 character(CS) :: uname, vname - integer :: i + integer :: i, l logical :: checkflag = .false. character(*), parameter :: subname = '(shr_strdata_readstrm) ' character(*), parameter :: F00 = "('(shr_strdata_readstrm) ',8a)" @@ -1321,7 +1391,7 @@ subroutine shr_strdata_readstrm(sdat, ns, stream, stream_mesh, stream_nlev, & call pio_closefile(pioid) endif if (sdat%masterproc) write(sdat%logunit,F00) 'opening : ',trim(filename) - rcode = pio_openfile(pio_subsystem, pioid, pio_iotype, trim(filename), pio_nowrite) + rcode = pio_openfile(sdat%pio_subsystem, pioid, sdat%io_type, trim(filename), pio_nowrite) call shr_stream_setCurrFile(stream, fileopen=.true., currfile=trim(filename), currpioid=pioid) endif @@ -1329,22 +1399,35 @@ subroutine shr_strdata_readstrm(sdat, ns, stream, stream_mesh, stream_nlev, & ! Determine the pio io descriptor for the stream from the first data field in the stream ! ****************************************************************************** - if (ESMF_MeshIsCreated(stream_mesh)) then - if(.not. pio_iodesc_set) then - call shr_strdata_set_stream_iodesc(sdat, pio_subsystem, pioid, & - trim(fldlist_stream(1)), stream_mesh, stream_nlev, pio_iodesc, rc=rc) + stream_nlev = per_stream%stream_nlev + + if (ESMF_MeshIsCreated(per_stream%stream_mesh)) then + if (.not. per_stream%stream_pio_iodesc_set) then + call shr_strdata_set_stream_iodesc(sdat, per_stream, trim(per_stream%fldlist_stream(1)), & + pioid, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return - pio_iodesc_set = .true. + per_stream%stream_pio_iodesc_set = .true. endif - call dshr_field_getfldptr(sdat%pstrm(ns)%field_stream, fldptr1=dataptr, rc=rc) - if (chkerr(rc,__LINE__,u_FILE_u)) return + if (stream_nlev > 1) then + call dshr_field_getfldptr(per_stream%field_stream, fldptr2=dataptr2d, rc=rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + else + call dshr_field_getfldptr(per_stream%field_stream, fldptr1=dataptr1d, rc=rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + end if else - allocate(dataptr(1)) + if (stream_nlev == 1) then + allocate(dataptr1d(1)) + else + call shr_sys_abort("ERROR: multi-level streams always require a stream mesh") + end if end if ! ****************************************************************************** ! Read in the stream data for field names in fldname_stream_input - but fill in ! the data for fldbun_stream with the field names fldname_stream_model + ! Note that the dimensions in the field bundle field are (stream_nlev,i) whereas + ! the dimension of the input data are (i,stream_nlev) ! ****************************************************************************** call t_startf(trim(istr)//'_readpio') @@ -1352,27 +1435,41 @@ subroutine shr_strdata_readstrm(sdat, ns, stream, stream_mesh, stream_nlev, & write(sdat%logunit,F02) 'file ' // trim(boundstr) //': ',trim(filename), nt endif - if(sdat%pstrm(ns)%ucomp > 0 .and. sdat%pstrm(ns)%vcomp > 0) then + if(per_stream%ucomp > 0 .and. per_stream%vcomp > 0) then call shr_string_listGetName(stream%stream_vectors,1,uname) call shr_string_listGetName(stream%stream_vectors,2,vname) - call dshr_field_getfldptr(sdat%pstrm(ns)%stream_vector, fldptr2=dataptr2d_src, rc=rc) + call dshr_field_getfldptr(per_stream%stream_vector, fldptr2=dataptr2d_src, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return endif - lsize = size(dataptr) - do nf = 1,size(fldlist_stream) - call dshr_fldbun_getfieldN(fldbun_model, nf, field_dst, rc=rc) - if (chkerr(rc,__LINE__,u_FILE_u)) return - rcode = pio_inq_varid(pioid, trim(fldlist_stream(nf)), varid) + do nf = 1,size(per_stream%fldlist_stream) + ! determine type of the variable + rcode = pio_inq_varid(pioid, trim(per_stream%fldlist_stream(nf)), varid) rcode = pio_inq_vartype(pioid, varid, pio_iovartype) - if (pio_iovartype == PIO_REAL .and. .not. allocated(data_real)) then - allocate(data_real(lsize)) - else if(pio_iovartype == PIO_SHORT .and. .not. allocated(data_short)) then - allocate(data_short(lsize)) - endif + ! allocate memory for input read + if (stream_nlev > 1) then + lsize = size(dataptr2d, dim=2) + if (pio_iovartype == PIO_REAL .and. .not. allocated(data_real2d)) then + allocate(data_real2d(lsize, stream_nlev)) + else if (pio_iovartype == PIO_DOUBLE .and. .not. allocated(data_dbl2d)) then + allocate(data_dbl2d(lsize, stream_nlev)) + else if(pio_iovartype == PIO_SHORT .and. .not. allocated(data_short2d)) then + allocate(data_short2d(lsize, stream_nlev)) + endif + else + lsize = size(dataptr1d) + if (pio_iovartype == PIO_REAL .and. .not. allocated(data_real1d)) then + allocate(data_real1d(lsize)) + else if (pio_iovartype == PIO_DOUBLE .and. .not. allocated(data_dbl1d)) then + allocate(data_dbl1d(lsize)) + else if(pio_iovartype == PIO_SHORT .and. .not. allocated(data_short1d)) then + allocate(data_short1d(lsize)) + endif + end if + ! determine if will handle fill handlefill = .false. call PIO_seterrorhandling(pioid, PIO_BCAST_ERROR, old_error_handle) if (pio_iovartype == PIO_REAL) then @@ -1382,11 +1479,11 @@ subroutine shr_strdata_readstrm(sdat, ns, stream, stream_mesh, stream_nlev, & else if (pio_iovartype == PIO_SHORT) then rcode = pio_get_att(pioid, varid, "scale_factor", scale_factor) if(rcode /= PIO_NOERR) then - call shr_sys_abort('DATATYPE PIO_SHORT requires attributes scale_factor and add_offset') + call shr_sys_abort('DATATYPE PIO_SHORT requires attributes scale_factor') endif rcode = pio_get_att(pioid, varid, "add_offset", add_offset) if(rcode /= PIO_NOERR) then - call shr_sys_abort('DATATYPE PIO_SHORT requires attributes scale_factor and add_offset') + call shr_sys_abort('DATATYPE PIO_SHORT requires attributes add_offset') endif rcode = pio_get_att(pioid, varid, "_FillValue", fillvalue_i2) endif @@ -1394,105 +1491,212 @@ subroutine shr_strdata_readstrm(sdat, ns, stream, stream_mesh, stream_nlev, & call PIO_seterrorhandling(pioid, old_error_handle) if (debug>0 .and. sdat%masterproc) then - write(sdat%logunit,F02)' reading '//trim(fldlist_stream(nf))//' into '//trim(fldlist_model(nf)),& + write(sdat%logunit,F02)' reading '//& + trim(per_stream%fldlist_stream(nf))//' into '//trim(per_stream%fldlist_model(nf)),& ' at time index: ',nt end if + ! read the data call pio_setframe(pioid, varid, int(nt,kind=Pio_Offset_Kind)) if (pio_iovartype == PIO_REAL) then - if (pio_iodesc_set) then - call pio_read_darray(pioid, varid, pio_iodesc, data_real, rcode) - else - rcode = pio_get_var(pioid, varid,start=(/1,1,nt/),count=(/1,1,1/), ival=data_real) - endif - if ( rcode /= PIO_NOERR ) then - call shr_sys_abort(' ERROR: reading in variable: '// trim(fldlist_stream(nf))) + ! ----------------------------- + ! pio_iovartype is PIO_REAL + ! ----------------------------- + if (stream_nlev > 1) then + if (per_stream%stream_pio_iodesc_set) then + call pio_read_darray(pioid, varid, per_stream%stream_pio_iodesc, data_real2d, rcode) + else + rcode = pio_get_var(pioid, varid,start=(/1,1,1,nt/),count=(/1,1,1,1/), ival=data_real2d) + end if + if ( rcode /= PIO_NOERR ) then + call shr_sys_abort(' ERROR: reading in variable: '// trim(per_stream%fldlist_stream(nf))) + end if + if (handlefill) then + do l = 1,stream_nlev + do n = 1,size(dataptr2d, dim=2) + if (.not. shr_infnan_isnan(data_real2d(n,l)) .and. data_real2d(n,l) .ne. fillvalue_r4) then + dataptr2d(l,n) = real(data_real2d(n,l), kind=r8) ! Note the order of indices + else + dataptr2d(l,n) = r8fill + endif + enddo + end do + else + do l = 1,stream_nlev + do n = 1,size(dataptr2d, dim=2) + dataptr2d(l,n) = real(data_real2d(n,l), kind=r8) + end do + end do + end if + else ! stream_nlev == 1 + if (per_stream%stream_pio_iodesc_set) then + call pio_read_darray(pioid, varid, per_stream%stream_pio_iodesc, data_real1d, rcode) + else + rcode = pio_get_var(pioid, varid,start=(/1,1,nt/),count=(/1,1,1/), ival=data_real1d) + endif + if ( rcode /= PIO_NOERR ) then + call shr_sys_abort(' ERROR: reading in variable: '// trim(per_stream%fldlist_stream(nf))) + end if + if(handlefill) then + do n=1,size(dataptr1d) + if(.not. shr_infnan_isnan(data_real1d(n)) .and. data_real1d(n) .ne. fillvalue_r4) then + dataptr1d(n) = real(data_real1d(n), kind=r8) + else + dataptr1d(n) = r8fill + endif + enddo + else + dataptr1d(:) = real(data_real1d(:),kind=r8) + endif end if - if(handlefill) then - do n=1,size(dataptr) - if(.not. shr_infnan_isnan(data_real(n)) .and. data_real(n) .ne. fillvalue_r4) then - dataptr(n) = real(data_real(n), kind=r8) - else - dataptr(n) = r8fill - endif - enddo - else - dataptr(:) = real(data_real(:),kind=r8) - endif + else if (pio_iovartype == PIO_DOUBLE) then - if (pio_iodesc_set) then - call pio_read_darray(pioid, varid, pio_iodesc, dataptr, rcode) - else - rcode = pio_get_var(pioid, varid,start=(/1,1,nt/),count=(/1,1,1/), ival=dataptr) - endif - if ( rcode /= PIO_NOERR ) then - call shr_sys_abort(' ERROR: reading in variable: '// trim(fldlist_stream(nf))) + ! ----------------------------- + ! pio_iovartype is PIO_DOUBLE + ! ----------------------------- + if (stream_nlev > 1) then + if (per_stream%stream_pio_iodesc_set) then + call pio_read_darray(pioid, varid, per_stream%stream_pio_iodesc, data_dbl2d, rcode) + else + rcode = pio_get_var(pioid, varid,start=(/1,1,1,nt/), count=(/1,1,1,1/), ival=data_dbl2d) + end if + if ( rcode /= PIO_NOERR ) then + call shr_sys_abort(' ERROR: reading in 2d double variable: '// trim(per_stream%fldlist_stream(nf))) + end if + if (handlefill) then + do l = 1,stream_nlev + do n = 1,size(dataptr2d, dim=2) + if (.not. shr_infnan_isnan(data_dbl2d(n,l)) .and. data_dbl2d(n,l) .ne. fillvalue_r8) then + dataptr2d(l,n) = r8fill + endif + enddo + end do + else + do l = 1,stream_nlev + do n = 1,size(dataptr2d, dim=2) + dataptr2d(l,n) = data_dbl2d(n,l) + end do + end do + end if + else ! stream_nlev == 1 + if (per_stream%stream_pio_iodesc_set) then + call pio_read_darray(pioid, varid, per_stream%stream_pio_iodesc, data_dbl1d, rcode) + else + rcode = pio_get_var(pioid, varid,start=(/1,1,nt/), count=(/1,1,1/), ival=data_dbl1d) + endif + if ( rcode /= PIO_NOERR ) then + call shr_sys_abort(' ERROR: reading in variable: '// trim(per_stream%fldlist_stream(nf))) + end if + if (handlefill) then + do n=1,size(dataptr1d) + if(.not. shr_infnan_isnan(data_dbl1d(n)) .and. data_dbl1d(n) .ne. fillvalue_r8) then + dataptr1d(n) = data_dbl1d(n) + else + dataptr1d(n) = r8fill + end if + enddo + endif end if - if(handlefill) then - do n=1,size(dataptr) - if(.not. shr_infnan_isnan(dataptr(n)) .and. dataptr(n).eq.fillvalue_r8) then - dataptr(n) = r8fill - endif - enddo - endif + elseif (pio_iovartype == PIO_SHORT) then - if (pio_iodesc_set) then - call pio_read_darray(pioid, varid, pio_iodesc, data_short, rcode) - else - rcode = pio_get_var(pioid, varid,start=(/1,1,nt/),count=(/1,1,1/), ival=data_short) - endif - if ( rcode /= PIO_NOERR ) then - call shr_sys_abort(' ERROR: reading in variable: '// trim(fldlist_stream(nf))) + ! ----------------------------- + ! pio_iovartype is PIO_SHORT + ! ----------------------------- + if (stream_nlev > 1) then + if (per_stream%stream_pio_iodesc_set) then + call pio_read_darray(pioid, varid, per_stream%stream_pio_iodesc, data_short2d, rcode) + else + rcode = pio_get_var(pioid, varid,start=(/1,1,1,nt/), count=(/1,1,1,1/), ival=data_short2d) + end if + if ( rcode /= PIO_NOERR ) then + call shr_sys_abort(' ERROR: reading in 2d short variable: '// trim(per_stream%fldlist_stream(nf))) + end if + if (handlefill) then + do l = 1,stream_nlev + do n = 1,lsize + if(data_short2d(n,l).eq.fillvalue_i2) then + dataptr2d(l,n) = r8fill + else + dataptr2d(l,n) = real(data_short2d(l,n),r8) * scale_factor + add_offset + endif + enddo + end do + else + do l = 1,stream_nlev + do n = 1,lsize + dataptr2d(l,n) = real(data_short2d(n,l),r8) * scale_factor + add_offset + enddo + end do + end if + else ! stream_nlev == 1 + if (per_stream%stream_pio_iodesc_set) then + call pio_read_darray(pioid, varid, per_stream%stream_pio_iodesc, data_short1d, rcode) + else + rcode = pio_get_var(pioid, varid,start=(/1,1,nt/),count=(/1,1,1/), ival=data_short1d) + endif + if ( rcode /= PIO_NOERR ) then + call shr_sys_abort(' ERROR: reading in variable: '// trim(per_stream%fldlist_stream(nf))) + end if + if(handlefill) then + do n=1,lsize + if(data_short1d(n).eq.fillvalue_i2) then + dataptr1d(n) = r8fill + else + dataptr1d(n) = real(data_short1d(n),r8) * scale_factor + add_offset + endif + enddo + else + do n=1,lsize + dataptr1d(n) = real(data_short1d(n),r8) * scale_factor + add_offset + enddo + endif end if - if(handlefill) then - do n=1,lsize - if(data_short(n).eq.fillvalue_i2) then - dataptr(n) = r8fill - else - dataptr(n) = real(data_short(n),r8) * scale_factor + add_offset - endif - enddo - else - do n=1,lsize - dataptr(n) = real(data_short(n),r8) * scale_factor + add_offset - enddo - endif + else + ! ----------------------------- + ! pio_iovartype is not supported + ! ----------------------------- call shr_sys_abort(subName//"ERROR: only double, real and short types are supported for stream read") + end if - if(associated(dataptr2d_src) .and. trim(fldlist_model(nf)) .eq. uname) then + ! Get a field on the model mesh + call dshr_fldbun_getfieldN(fldbun_data, nf, field_dst, rc=rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + + if(associated(dataptr2d_src) .and. trim(per_stream%fldlist_model(nf)) .eq. uname) then ! save in dataptr2d_src - dataptr2d_src(1,:) = dataptr(:) - elseif(associated(dataptr2d_src) .and. trim(fldlist_model(nf)) .eq. vname) then - dataptr2d_src(2,:) = dataptr(:) - else if (pio_iodesc_set) then + dataptr2d_src(1,:) = dataptr1d(:) + elseif(associated(dataptr2d_src) .and. trim(per_stream%fldlist_model(nf)) .eq. vname) then + dataptr2d_src(2,:) = dataptr1d(:) + else if (per_stream%stream_pio_iodesc_set) then ! Regrid the field_stream read in to the model mesh - call ESMF_FieldRegrid(sdat%pstrm(ns)%field_stream, field_dst, routehandle=sdat%pstrm(ns)%routehandle, & + call ESMF_FieldRegrid(per_stream%field_stream, field_dst, routehandle=per_stream%routehandle, & termorderflag=ESMF_TERMORDER_SRCSEQ, checkflag=.false., zeroregion=ESMF_REGION_TOTAL, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return else - call ESMF_FieldFill(field_dst, dataFillScheme="const", const1=dataptr(1), rc=rc) + call ESMF_FieldFill(field_dst, dataFillScheme="const", const1=dataptr1d(1), rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return endif enddo ! Both components of a vector stream must be in the same input stream file - if(associated(dataptr2d_src)) then + if (associated(dataptr2d_src) .and. associated(dataptr1d)) then ! get lon and lat of stream u and v fields + lsize = size(dataptr1d) allocate(dataptr(lsize)) - call ESMF_MeshGet(sdat%pstrm(ns)%stream_mesh, spatialDim=spatialDim, numOwnedElements=numOwnedElements, rc=rc) + call ESMF_MeshGet(per_stream%stream_mesh, spatialDim=spatialDim, numOwnedElements=numOwnedElements, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return allocate(nu_coords(spatialDim*numOwnedElements)) - call ESMF_MeshGet(sdat%pstrm(ns)%stream_mesh, ownedElemCoords=nu_coords) + call ESMF_MeshGet(per_stream%stream_mesh, ownedElemCoords=nu_coords) if (chkerr(rc,__LINE__,u_FILE_u)) return allocate(nv_coords(spatialDim*numOwnedElements)) - call ESMF_MeshGet(sdat%pstrm(ns)%stream_mesh, ownedElemCoords=nv_coords) + call ESMF_MeshGet(per_stream%stream_mesh, ownedElemCoords=nv_coords) if (chkerr(rc,__LINE__,u_FILE_u)) return do i=1,lsize @@ -1508,15 +1712,15 @@ subroutine shr_strdata_readstrm(sdat, ns, stream, stream_mesh, stream_nlev, & ungriddedLbound=(/1/), ungriddedUbound=(/2/), gridToFieldMap=(/2/), meshloc=ESMF_MESHLOC_ELEMENT, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return - call ESMF_FieldRegrid(sdat%pstrm(ns)%stream_vector, vector_dst, sdat%pstrm(ns)%routehandle, & + call ESMF_FieldRegrid(per_stream%stream_vector, vector_dst, per_stream%routehandle, & termorderflag=ESMF_TERMORDER_SRCSEQ, checkflag=checkflag, zeroregion=ESMF_REGION_TOTAL, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return call ESMF_FieldGet(vector_dst, farrayPtr=dataptr2d_dst, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return - call dshr_fldbun_getFldPtr(fldbun_model, trim(uname), data_u_dst, rc=rc) + call dshr_fldbun_getFldPtr(fldbun_data, trim(uname), data_u_dst, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return - call dshr_fldbun_getFldPtr(fldbun_model, trim(vname), data_v_dst, rc=rc) + call dshr_fldbun_getFldPtr(fldbun_data, trim(vname), data_v_dst, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return do i = 1,size(data_u_dst) @@ -1527,33 +1731,41 @@ subroutine shr_strdata_readstrm(sdat, ns, stream, stream_mesh, stream_nlev, & data_u_dst(i) = coslon * dataptr2d_dst(1,i) + sinlon * dataptr2d_dst(2,i) data_v_dst(i) = -sinlon * dataptr2d_dst(1,i) + coslon * dataptr2d_dst(2,i) enddo + + deallocate(dataptr) endif if (pio_iovartype == PIO_REAL) then - deallocate(data_real) + if (allocated(data_real1d)) deallocate(data_real1d) + if (allocated(data_real2d)) deallocate(data_real2d) + else if (pio_iovartype == PIO_DOUBLE) then + if (allocated(data_dbl1d)) deallocate(data_dbl1d) + if (allocated(data_dbl2d)) deallocate(data_dbl2d) + else if (pio_iovartype == PIO_SHORT) then + if (allocated(data_short1d)) deallocate(data_short1d) + if (allocated(data_short2d)) deallocate(data_short2d) endif - if(.not. pio_iodesc_set) then - deallocate(dataptr) + if (.not. per_stream%stream_pio_iodesc_set) then + deallocate(dataptr1d) endif call t_stopf(trim(istr)//'_readpio') end subroutine shr_strdata_readstrm !=============================================================================== - subroutine shr_strdata_set_stream_iodesc(sdat, & - pio_subsystem, pioid, fldname, stream_mesh, stream_nlev, pio_iodesc, rc) + subroutine shr_strdata_set_stream_iodesc(sdat, per_stream, fldname, pioid, rc) + + ! Set stream_pio_iodesc and stream_pio_iodesc_set in stream ! input/output variables - type(shr_strdata_type) , intent(in) :: sdat - type(iosystem_desc_t) , intent(inout), target :: pio_subsystem - type(file_desc_t) , intent(inout) :: pioid - character(len=*) , intent(in) :: fldname - type(ESMF_Mesh) , intent(in) :: stream_mesh - integer , intent(in) :: stream_nlev - type(io_desc_t) , intent(inout) :: pio_iodesc - integer , intent(out) :: rc + type(shr_strdata_type) , intent(in) :: sdat ! strdata data data-type + type(shr_strdata_perstream) , intent(inout) :: per_stream + character(len=*) , intent(in) :: fldname + type(file_desc_t) , intent(inout) :: pioid + integer , intent(out) :: rc ! local variables + integer :: stream_nlev integer :: pio_iovartype integer :: n, m, cnt type(var_desc_t) :: varid @@ -1572,12 +1784,9 @@ subroutine shr_strdata_set_stream_iodesc(sdat, & character(*), parameter :: F01 = "('(shr_strdata_set_stream_iodesc) ',a,i8,2x,i8,2x,a)" character(*), parameter :: F02 = "('(shr_strdata_set_stream_iodesc) ',a,i8,2x,i8,2x,i8,2x,a)" !------------------------------------------------------------------------------- - integer :: old_error_handle rc = ESMF_SUCCESS -! call pio_seterrorhandling(pioid, PIO_BCAST_ERROR, old_error_handle) - ! query the first field in the stream dataset rcode = pio_inq_varid(pioid, trim(fldname), varid) rcode = pio_inq_varndims(pioid, varid, ndims) @@ -1586,13 +1795,12 @@ subroutine shr_strdata_set_stream_iodesc(sdat, & allocate(dimlens(ndims)) rcode = pio_inq_vardimid(pioid, varid, dimids(1:ndims)) - do n = 1, ndims rcode = pio_inq_dimlen(pioid, dimids(n), dimlens(n)) end do ! determine compdof for stream - call ESMF_MeshGet(stream_mesh, elementdistGrid=distGrid, rc=rc) + call ESMF_MeshGet(per_stream%stream_mesh, elementdistGrid=distGrid, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return call ESMF_DistGridGet(distGrid, localDe=0, elementCount=lsize, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return @@ -1603,13 +1811,16 @@ subroutine shr_strdata_set_stream_iodesc(sdat, & ! determine type of the variable rcode = pio_inq_vartype(pioid, varid, pio_iovartype) + stream_nlev = per_stream%stream_nlev + if (ndims == 2) then if (sdat%masterproc) then write(sdat%logunit,F00) 'setting iodesc for : '//trim(fldname)// & ' with dimlens(1), dimlens2 = ',dimlens(1),dimlens(2),& ' variable had no time dimension ' end if - call pio_initdecomp(pio_subsystem, pio_iovartype, (/dimlens(1),dimlens(2)/), compdof, pio_iodesc) + call pio_initdecomp(sdat%pio_subsystem, pio_iovartype, (/dimlens(1),dimlens(2)/), compdof, & + per_stream%stream_pio_iodesc) else if (ndims == 3) then rcode = pio_inq_dimname(pioid, dimids(ndims), dimname) @@ -1625,14 +1836,16 @@ subroutine shr_strdata_set_stream_iodesc(sdat, & compdof3d(cnt) = (compdof(m)-1)*stream_nlev + n enddo enddo - call pio_initdecomp(pio_subsystem, pio_iovartype, (/dimlens(1),dimlens(2),dimlens(3)/), compdof3d, pio_iodesc) + call pio_initdecomp(sdat%pio_subsystem, pio_iovartype, (/dimlens(1),dimlens(2),dimlens(3)/), compdof3d, & + per_stream%stream_pio_iodesc) else if (trim(dimname) == 'time' .or. trim(dimname) == 'nt') then if (sdat%masterproc) then write(sdat%logunit,F01) 'setting iodesc for : '//trim(fldname)// & ' with dimlens(1), dimlens(2) = ',dimlens(1),dimlens(2),& ' variable had time dimension '//trim(dimname) end if - call pio_initdecomp(pio_subsystem, pio_iovartype, (/dimlens(1),dimlens(2)/), compdof, pio_iodesc) + call pio_initdecomp(sdat%pio_subsystem, pio_iovartype, (/dimlens(1),dimlens(2)/), compdof, & + per_stream%stream_pio_iodesc) end if else if (ndims == 4) then @@ -1651,7 +1864,8 @@ subroutine shr_strdata_set_stream_iodesc(sdat, & enddo enddo end if - call pio_initdecomp(pio_subsystem, pio_iovartype, (/dimlens(1),dimlens(2),dimlens(3)/), compdof, pio_iodesc) + call pio_initdecomp(sdat%pio_subsystem, pio_iovartype, (/dimlens(1),dimlens(2),dimlens(3)/), compdof, & + per_stream%stream_pio_iodesc) else write(6,*)'ERROR: dimlens= ',dimlens call shr_sys_abort(trim(subname)//' dimlens = 4 assumes a time dimension') @@ -1661,7 +1875,6 @@ subroutine shr_strdata_set_stream_iodesc(sdat, & write(6,*)'ERROR: dimlens= ',dimlens call shr_sys_abort(trim(subname)//' only ndims of 2 and 3 and 4 are currently supported') end if - ! call pio_seterrorhandling(pioid, old_error_handle) deallocate(compdof) if (associated(compdof3d)) deallocate(compdof3d) @@ -1671,7 +1884,7 @@ subroutine shr_strdata_set_stream_iodesc(sdat, & end subroutine shr_strdata_set_stream_iodesc !=============================================================================== - subroutine shr_strdata_get_stream_pointer(sdat, strm_fld, strm_ptr, rc) + subroutine shr_strdata_get_stream_pointer_1d(sdat, strm_fld, strm_ptr, rc) ! Set a pointer, strm_ptr, for field, strm_fld, into sdat fldbun_model field bundle @@ -1684,8 +1897,8 @@ subroutine shr_strdata_get_stream_pointer(sdat, strm_fld, strm_ptr, rc) ! local variables integer :: ns, nf logical :: found - character(len=*), parameter :: subname='(shr_strdata_get_stream_pointer)' - character(*) , parameter :: F00 = "('(shr_strdata_get_stream_pointer) ',8a)" + character(len=*), parameter :: subname='(shr_strdata_get_stream_pointer_1d)' + character(*) , parameter :: F00 = "('(shr_strdata_get_stream_pointer_1d) ',8a)" ! ---------------------------------------------- rc = ESMF_SUCCESS @@ -1697,7 +1910,7 @@ subroutine shr_strdata_get_stream_pointer(sdat, strm_fld, strm_ptr, rc) do nf = 1,size(sdat%pstrm(ns)%fldlist_model) if (trim(strm_fld) == trim(sdat%pstrm(ns)%fldlist_model(nf))) then call dshr_fldbun_getfldptr(sdat%pstrm(ns)%fldbun_model, trim(sdat%pstrm(ns)%fldlist_model(nf)), & - strm_ptr, rc=rc) + fldptr1=strm_ptr, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return if (sdat%masterproc) then write(sdat%logunit,F00)' strm_ptr is allocated for stream field strm_'//trim(strm_fld) @@ -1708,8 +1921,47 @@ subroutine shr_strdata_get_stream_pointer(sdat, strm_fld, strm_ptr, rc) end do if (found) exit end do + end subroutine shr_strdata_get_stream_pointer_1d + + !=============================================================================== + subroutine shr_strdata_get_stream_pointer_2d(sdat, strm_fld, strm_ptr, rc) + + ! Set a pointer, strm_ptr, for field, strm_fld, into sdat fldbun_model field bundle - end subroutine shr_strdata_get_stream_pointer + ! input/output variables + type(shr_strdata_type) , intent(in) :: sdat + character(len=*) , intent(in) :: strm_fld + real(r8) , pointer :: strm_ptr(:,:) + integer , intent(out) :: rc + + ! local variables + integer :: ns, nf + logical :: found + character(len=*), parameter :: subname='(shr_strdata_get_stream_pointer_2d)' + character(*) , parameter :: F00 = "('(shr_strdata_get_stream_pointer_2d) ',8a)" + ! ---------------------------------------------- + + rc = ESMF_SUCCESS + + ! loop over all input streams and determine if the strm_fld is in the field bundle of the target stream + do ns = 1, shr_strdata_get_stream_count(sdat) + found = .false. + ! Check if requested stream field is read in - and if it is then point into the stream field bundle + do nf = 1,size(sdat%pstrm(ns)%fldlist_model) + if (trim(strm_fld) == trim(sdat%pstrm(ns)%fldlist_model(nf))) then + call dshr_fldbun_getfldptr(sdat%pstrm(ns)%fldbun_model, trim(sdat%pstrm(ns)%fldlist_model(nf)), & + fldptr2=strm_ptr, rc=rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + if (sdat%masterproc) then + write(sdat%logunit,F00)' strm_ptr is allocated for stream field strm_'//trim(strm_fld) + end if + found = .true. + exit + end if + end do + if (found) exit + end do + end subroutine shr_strdata_get_stream_pointer_2d !=============================================================================== subroutine shr_strdata_handle_error(ierr, errorstr) diff --git a/streams/dshr_stream_mod.F90 b/streams/dshr_stream_mod.F90 index 0427ee9c9..501bcc0b2 100644 --- a/streams/dshr_stream_mod.F90 +++ b/streams/dshr_stream_mod.F90 @@ -365,9 +365,12 @@ end subroutine shr_stream_init_from_xml !=============================================================================== - subroutine shr_stream_init_from_inline(streamdat, stream_meshfile, stream_mapalgo, & - stream_yearFirst, stream_yearLast, stream_yearAlign, stream_offset, stream_taxmode, & - stream_fldlistFile, stream_fldListModel, stream_fileNames, logunit, compname) + subroutine shr_stream_init_from_inline(streamdat, & + stream_meshfile, stream_lev_dimname, stream_mapalgo, & + stream_yearFirst, stream_yearLast, stream_yearAlign, & + stream_offset, stream_taxmode, stream_tintalgo, stream_dtlimit, & + stream_fldlistFile, stream_fldListModel, stream_fileNames, & + logunit, compname) ! -------------------------------------------------------- ! set values of stream datatype independent of a reading in a stream text file @@ -375,14 +378,17 @@ subroutine shr_stream_init_from_inline(streamdat, stream_meshfile, stream_mapalg ! -------------------------------------------------------- ! input/output variables - type(shr_stream_streamType) , pointer, intent(inout) :: streamdat(:) ! data streams (assume 1 below) + type(shr_stream_streamType) ,pointer, intent(inout) :: streamdat(:) ! data streams (assume 1 below) character(*) ,intent(in) :: stream_meshFile ! full pathname to stream mesh file + character(*) ,intent(in) :: stream_lev_dimname ! name of vertical dimension in stream character(*) ,intent(in) :: stream_mapalgo ! stream mesh -> model mesh mapping type integer ,intent(in) :: stream_yearFirst ! first year to use integer ,intent(in) :: stream_yearLast ! last year to use integer ,intent(in) :: stream_yearAlign ! align yearFirst with this model year + character(*) ,intent(in) :: stream_tintalgo ! time interpolation algorithm integer ,intent(in) :: stream_offset ! offset in seconds of stream data character(*) ,intent(in) :: stream_taxMode ! time axis mode + real(r8) ,intent(in) :: stream_dtlimit ! ratio of max/min stream delta times character(*) ,intent(in) :: stream_fldListFile(:) ! file field names, colon delim list character(*) ,intent(in) :: stream_fldListModel(:) ! model field names, colon delim list character(*) ,intent(in) :: stream_filenames(:) ! stream data filenames (full pathnamesa) @@ -401,13 +407,18 @@ subroutine shr_stream_init_from_inline(streamdat, stream_meshfile, stream_mapalg allocate(streamdat(1)) ! overwrite default values + streamdat(1)%meshFile = trim(stream_meshFile) + streamdat(1)%lev_dimname = trim(stream_lev_dimname) + streamdat(1)%mapalgo = trim(stream_mapalgo) + streamdat(1)%yearFirst = stream_yearFirst streamdat(1)%yearLast = stream_yearLast streamdat(1)%yearAlign = stream_yearAlign + + streamdat(1)%tinterpAlgo = trim(stream_tintalgo) streamdat(1)%offset = stream_offset streamdat(1)%taxMode = trim(stream_taxMode) - streamdat(1)%meshFile = trim(stream_meshFile) - streamdat(1)%mapalgo = trim(stream_mapalgo) + streamdat(1)%dtlimit = stream_dtlimit streamdat(1)%pio_subsystem => shr_pio_getiosys(trim(compname)) streamdat(1)%pio_iotype = shr_pio_getiotype(trim(compname)) @@ -433,7 +444,7 @@ subroutine shr_stream_init_from_inline(streamdat, stream_meshfile, stream_mapalg streamdat(1)%varlist(n)%nameinmodel = trim(stream_fldlistModel(n)) end do - ! Get initial calendar value + ! Get stream calendar call shr_stream_getCalendar(streamdat(1), 1, calendar) streamdat(1)%calendar = trim(calendar) From 6ed43c2198821aa850597b5b56e84a7f1e15ecfc Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Thu, 6 Aug 2020 13:00:04 -0600 Subject: [PATCH 015/153] add fox as a submodule of cdeps --- .gitmodules | 3 +++ fox | 1 + 2 files changed, 4 insertions(+) create mode 100644 .gitmodules create mode 160000 fox diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..eff7950f6 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "fox"] + path = fox + url = https://github.com/ESMCI/fox.git diff --git a/fox b/fox new file mode 160000 index 000000000..0ed59c155 --- /dev/null +++ b/fox @@ -0,0 +1 @@ +Subproject commit 0ed59c15525258579efcf40369d383193f170902 From 4f5499d3d86a9572dd0faebd0968e5585525c209 Mon Sep 17 00:00:00 2001 From: Mariana Vertenstein Date: Thu, 6 Aug 2020 13:45:59 -0600 Subject: [PATCH 016/153] cleanup --- streams/dshr_strdata_mod.F90 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/streams/dshr_strdata_mod.F90 b/streams/dshr_strdata_mod.F90 index 6e2cf2a95..21441bf0a 100644 --- a/streams/dshr_strdata_mod.F90 +++ b/streams/dshr_strdata_mod.F90 @@ -1264,8 +1264,6 @@ subroutine shr_strdata_readstrm(sdat, ns, stream, stream_mesh, & lsize = size(dataptr) do nf = 1,size(fldlist_stream) - call dshr_fldbun_getfieldN(fldbun_model, nf, field_dst, rc=rc) - if (chkerr(rc,__LINE__,u_FILE_u)) return rcode = pio_inq_varid(pioid, trim(fldlist_stream(nf)), varid) ! determine type of the variable rcode = pio_inq_vartype(pioid, varid, pio_iovartype) @@ -1371,6 +1369,9 @@ subroutine shr_strdata_readstrm(sdat, ns, stream, stream_mesh, & elseif(associated(dataptr2d_src) .and. trim(fldlist_model(nf)) .eq. vname) then dataptr2d_src(2,:) = dataptr(:) else if (pio_iodesc_set) then + call dshr_fldbun_getfieldN(fldbun_model, nf, field_dst, rc=rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + call ESMF_FieldRegrid(sdat%pstrm(ns)%field_stream, field_dst, routehandle=sdat%pstrm(ns)%routehandle, & termorderflag=ESMF_TERMORDER_SRCSEQ, checkflag=.false., zeroregion=ESMF_REGION_TOTAL, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return From 1c6624d0c9c48b3e5170b2611e4b5a98426d6ecb Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Thu, 6 Aug 2020 14:36:21 -0600 Subject: [PATCH 017/153] add fox submodule --- CMakeLists.txt | 10 +--------- cime_config/buildlib | 4 ++-- cmake/FindFoX.cmake | 40 ---------------------------------------- cmake/FindPIO.cmake | 2 +- docn/ocn_comp_nuopc.F90 | 2 -- streams/CMakeLists.txt | 3 ++- 6 files changed, 6 insertions(+), 55 deletions(-) delete mode 100644 cmake/FindFoX.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index c6f249991..1dc057067 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,20 +11,12 @@ else() endif() find_package(PIO REQUIRED COMPONENT C Fortran PATH ${PIO_PATH}) -if (DEFINED FOX) - set(FOX_PATH ${FOX}) -else() - set(FOX_PATH $ENV{FOX}) -endif() -find_package(FoX REQUIRED HINT ${FOX}) - if (DEFINED CIMEROOT) message("Using CIME in ${CIMEROOT} with compiler ${COMPILER}") include(${CASEROOT}/Macros.cmake) if (${PIO_VERSION} LESS 2) message( FATAL_ERROR "Version 2 of the PIO library required") endif() - set(FOX ${LIBROOT}) set(CMAKE_Fortran_FLAGS "${FFLAGS} -I${LIBROOT}/include -I${LIBROOT}/finclude -I${LIBROOT}/nuopc/esmf/${NINST_VALUE}/include") else () set(BLD_STANDALONE TRUE) @@ -39,7 +31,7 @@ if(BLD_STANDALONE) list(APPEND EXTRA_INCLUDES "${CMAKE_BINARY_DIR}/share" ) endif() - +add_subdirectory(fox) add_subdirectory(streams) add_subdirectory(dshr) diff --git a/cime_config/buildlib b/cime_config/buildlib index 2d7f6f858..d6f460072 100755 --- a/cime_config/buildlib +++ b/cime_config/buildlib @@ -58,8 +58,8 @@ def buildlib(bldroot, libroot, case, compname=None): cmake_flags += " -DCMAKE_INSTALL_PREFIX={} ".format(libroot) cmake_flags += " -DLIBROOT={} ".format(libroot) + srcpath cmake_flags += " -DMPILIB={} ".format(mpilib) - cmake_flags += " -DPIO={} ".format(os.path.join(case.get_value("EXEROOT"),sharedpath)) - cmake_flags += " -DFOX={} ".format(os.path.join(case.get_value("EXEROOT"),sharedpath)) + cmake_flags += " -DPIO_C_LIBRARY={path}/lib -DPIO_C_INCLUDE_DIR={path}/include ".format(path=os.path.join(case.get_value("EXEROOT"),sharedpath)) + cmake_flags += " -DPIO_Fortran_LIBRARY={path}/lib -DPIO_Fortran_INCLUDE_DIR={path}/include ".format(path=os.path.join(case.get_value("EXEROOT"),sharedpath)) logger.info("cmake_flags {}".format(cmake_flags)) s,o,e = run_cmd("cmake {} ".format(cmake_flags), from_dir=bldroot, verbose=True) diff --git a/cmake/FindFoX.cmake b/cmake/FindFoX.cmake deleted file mode 100644 index 7ddb02b1a..000000000 --- a/cmake/FindFoX.cmake +++ /dev/null @@ -1,40 +0,0 @@ -# - Try to find FoX -# -# This can be controled by setting FoX_PATH or FoX__PATH Cmake variables, -# where is the COMPONENT language one needs. -# -# Once done, this will define: -# -# FoX__FOUND (BOOL) - system has FoX -# FoX__IS_SHARED (BOOL) - whether the library is shared/dynamic -# FoX__INCLUDE_DIR (PATH) - Location of the header files and modules -# FoX__LIBRARY (File) - Path to the library files -# FoX__LIBRARIES (List) - link these to use FoX -# -# Available COMPONENTS are: Fortran -# -include (LibFind) -include (LibCheck) - -# Define FoX Fortran Component -define_package_component(FoX DEFAULT - COMPONENT Fortran - INCLUDE_NAMES fox_common.mod - LIBRARY_NAMES FoX_common) - -# Search for list of valid components requested -find_valid_components(FoX) - -#============================================================================== -# SEARCH FOR VALIDATED COMPONENTS -foreach (pcomp IN LISTS FoX_FIND_VALID_COMPONENTS) - set(FoX_Fortran_INCLUDE_DIR $ENV{FoX}/finclude) - set(FoX_Fortran_LIBRARY $ENV{FoX}/lib) - initialize_paths(FoX_${pcomp}_PATHS - INCLUDE_DIRECTORIES $ENV{FoX}/finclude - LIBRARIES $ENV{FoX}/lib) - find_package_component(FoX COMPONENT ${pcomp}) -endforeach () -if(FoX_Fortran_FOUND) -message(" Found FoX: ${FoX_Fortran_INCLUDE_DIR}") -endif() \ No newline at end of file diff --git a/cmake/FindPIO.cmake b/cmake/FindPIO.cmake index 141834128..2a7af648a 100644 --- a/cmake/FindPIO.cmake +++ b/cmake/FindPIO.cmake @@ -47,7 +47,7 @@ foreach (pcomp IN LISTS PIO_FIND_VALID_COMPONENTS) find_package_component(PIO COMPONENT ${pcomp} PATHS ${PIO_${pcomp}_PATHS}) else () - find_package_component(PIO COMPONENT ${pcomp}) + find_package_component(PIO COMPONENT ${pcomp} HINT PIO_${pcomp}_PATH=${PIO_PATH}) endif () # Continue only if component found diff --git a/docn/ocn_comp_nuopc.F90 b/docn/ocn_comp_nuopc.F90 index 81c531c88..8b7300ad1 100644 --- a/docn/ocn_comp_nuopc.F90 +++ b/docn/ocn_comp_nuopc.F90 @@ -494,7 +494,6 @@ subroutine docn_comp_run(importState, exportState, clock, target_ymd, target_tod !-------------------- ! Advance data model streams - time and spatially interpolate to model time and grid - call t_barrierf('docn_BARRIER',mpicom) call ESMF_TraceRegionEnter('docn_strdata_advance') call shr_strdata_advance(sdat, target_ymd, target_tod, logunit, 'docn', rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return @@ -502,7 +501,6 @@ subroutine docn_comp_run(importState, exportState, clock, target_ymd, target_tod ! Copy all fields from streams to export state as default ! This automatically will update the fields in the export state - call t_barrierf('docn_dfield_copy_BARRIER', mpicom) call ESMF_TraceRegionEnter('docn_dfield_copy') if(.not. aquaplanet) then call dshr_dfield_copy(dfields, sdat, rc) diff --git a/streams/CMakeLists.txt b/streams/CMakeLists.txt index 902b53add..e57a520bc 100644 --- a/streams/CMakeLists.txt +++ b/streams/CMakeLists.txt @@ -13,12 +13,13 @@ foreach(FILE ${SRCFILES}) endforeach() message("Stream srcfiles are ${SRCFILES}") add_library(streams ${SRCFILES}) +add_dependencies(streams FoX_dom) if(BLD_STANDALONE) add_dependencies(streams cdeps_share) endif() +target_include_directories (streams PUBLIC ${CMAKE_BINARY_DIR}/fox/include) target_include_directories (streams PUBLIC ${ESMF_F90COMPILEPATHS}) target_include_directories (streams PUBLIC ${PIO_Fortran_INCLUDE_DIR}) -target_include_directories (streams PUBLIC ${FoX_Fortran_INCLUDE_DIR}) target_include_directories (streams PUBLIC ${CMAKE_BINARY_DIR}/share) install(TARGETS streams LIBRARY DESTINATION lib) From fac382cc0dae2cb398fee54a05109630724fef7a Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Thu, 6 Aug 2020 15:32:49 -0600 Subject: [PATCH 018/153] remove more t_barriers --- dwav/wav_comp_nuopc.F90 | 2 -- 1 file changed, 2 deletions(-) diff --git a/dwav/wav_comp_nuopc.F90 b/dwav/wav_comp_nuopc.F90 index 2a39fdd63..d48abb636 100644 --- a/dwav/wav_comp_nuopc.F90 +++ b/dwav/wav_comp_nuopc.F90 @@ -490,7 +490,6 @@ subroutine dwav_comp_run(mpicom, my_task, logunit, target_ymd, target_tod, sdat, !-------------------- ! time and spatially interpolate to model time and grid - call t_barrierf('dwav_BARRIER',mpicom) call ESMF_TraceRegionEnter('dwav_strdata_advance') call shr_strdata_advance(sdat, target_ymd, target_tod, logunit, 'dwav', rc=rc) call ESMF_TraceRegionExit('dwav_strdata_advance') @@ -500,7 +499,6 @@ subroutine dwav_comp_run(mpicom, my_task, logunit, target_ymd, target_tod, sdat, !-------------------- ! This automatically will update the fields in the export state - call t_barrierf('dwav_comp_strdata_copy_BARRIER', mpicom) call ESMF_TraceRegionEnter('dwav_strdata_copy') call dshr_dfield_copy(dfields, sdat, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return From 3bfc1009ed82b8aee1a0dcb724f0444750e40276 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 10:13:06 -0600 Subject: [PATCH 019/153] build fixes --- streams/CMakeLists.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/streams/CMakeLists.txt b/streams/CMakeLists.txt index e57a520bc..b8466cadf 100644 --- a/streams/CMakeLists.txt +++ b/streams/CMakeLists.txt @@ -1,7 +1,7 @@ set(SRCFILES dshr_methods_mod.F90 - dshr_strdata_mod.F90 - dshr_stream_mod.F90 - dshr_tinterp_mod.F90) + dshr_strdata_mod.F90 + dshr_stream_mod.F90 + dshr_tinterp_mod.F90) set(MODFILES ${SRCFILES}) foreach(FILE ${SRCFILES}) list(TRANSFORM MODFILES REPLACE ".F90" ".mod") @@ -17,12 +17,12 @@ add_dependencies(streams FoX_dom) if(BLD_STANDALONE) add_dependencies(streams cdeps_share) endif() -target_include_directories (streams PUBLIC ${CMAKE_BINARY_DIR}/fox/include) +target_include_directories (streams PUBLIC ${CMAKE_BINARY_DIR}/fox/modules) target_include_directories (streams PUBLIC ${ESMF_F90COMPILEPATHS}) target_include_directories (streams PUBLIC ${PIO_Fortran_INCLUDE_DIR}) target_include_directories (streams PUBLIC ${CMAKE_BINARY_DIR}/share) install(TARGETS streams - LIBRARY DESTINATION lib) + LIBRARY DESTINATION lib) foreach(MOD ${MODFILES}) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${MOD}" DESTINATION include) endforeach() From a6a682a9bebdb8b8b25ed2b4ab9eaf507b3fcec1 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 10:16:39 -0600 Subject: [PATCH 020/153] update fox --- fox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fox b/fox index 0ed59c155..5744eac4c 160000 --- a/fox +++ b/fox @@ -1 +1 @@ -Subproject commit 0ed59c15525258579efcf40369d383193f170902 +Subproject commit 5744eac4c533925a13bc5740861d40e343e91989 From 7a0c37fb49f9850d11c4a6ea9328c985f63990e9 Mon Sep 17 00:00:00 2001 From: jedwards4b Date: Thu, 6 Aug 2020 15:16:44 -0600 Subject: [PATCH 021/153] Create extbuild.yml --- .github/workflows/extbuild.yml | 48 ++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 .github/workflows/extbuild.yml diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml new file mode 100644 index 000000000..ff4cc5b71 --- /dev/null +++ b/.github/workflows/extbuild.yml @@ -0,0 +1,48 @@ +# This is a basic workflow to help you get started with Actions + +name: extbuild + +# Controls when the action will run. Triggers the workflow on push or pull request +# events but only for the master branch +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + env: + CC: mpicc + FC: mpifort + CPPFLAGS: "-I/usr/include -I/usr/local/include" + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v2 + + # Runs a single command using the runners shell + - name: Installs + run: sudo apt-get install netcdf-bin libnetcdf-dev gfortran wget openmpi-bin libopenmpi-dev + - name: pnetcdf build + run: | + wget https://parallel-netcdf.github.io/Release/pnetcdf-1.12.1.tar.gz + tar -xzvf pnetcdf-1.12.1.tar.gz + ls -l + pushd pnetcdf-1.12.1 + ./configure --prefix=/usr --enable-shared --disable-cxx + make + sudo make install + popd + - name: Build PIO + run: | + wget https://github.com/NCAR/ParallelIO/releases/download/pio_2_5_1/pio-2.5.1.tar.gz + mkdir build + cd build + cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off ../pio-2.5.1 + make VERBOSE=1 + From 85f4ee2963e0b71e9da7c6b2f17457b768e68719 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Thu, 6 Aug 2020 15:25:29 -0600 Subject: [PATCH 022/153] untar pio --- .github/workflows/extbuild.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index ff4cc5b71..00f8fc268 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -27,10 +27,10 @@ jobs: # Runs a single command using the runners shell - name: Installs - run: sudo apt-get install netcdf-bin libnetcdf-dev gfortran wget openmpi-bin libopenmpi-dev + run: sudo apt-get install netcdf-bin libnetcdf-dev gfortran wget openmpi-bin libopenmpi-dev - name: pnetcdf build run: | - wget https://parallel-netcdf.github.io/Release/pnetcdf-1.12.1.tar.gz + wget https://parallel-netcdf.github.io/Release/pnetcdf-1.12.1.tar.gz tar -xzvf pnetcdf-1.12.1.tar.gz ls -l pushd pnetcdf-1.12.1 @@ -41,8 +41,8 @@ jobs: - name: Build PIO run: | wget https://github.com/NCAR/ParallelIO/releases/download/pio_2_5_1/pio-2.5.1.tar.gz + tar -xzvf pio-2.5.1.tar.gz mkdir build cd build cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off ../pio-2.5.1 make VERBOSE=1 - From 56784aa7c2d90c1e3c84011c00a554970a2415f0 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Thu, 6 Aug 2020 15:28:21 -0600 Subject: [PATCH 023/153] no tabs allowed --- .github/workflows/extbuild.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index 00f8fc268..7ad644e95 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -41,7 +41,7 @@ jobs: - name: Build PIO run: | wget https://github.com/NCAR/ParallelIO/releases/download/pio_2_5_1/pio-2.5.1.tar.gz - tar -xzvf pio-2.5.1.tar.gz + tar -xzvf pio-2.5.1.tar.gz mkdir build cd build cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off ../pio-2.5.1 From 17b9a45e4f8d44f72d73d67e3a4092d36272b697 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Thu, 6 Aug 2020 15:39:29 -0600 Subject: [PATCH 024/153] add cdeps build --- .github/workflows/extbuild.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index 7ad644e95..f9cc89a9e 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -46,3 +46,11 @@ jobs: cd build cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off ../pio-2.5.1 make VERBOSE=1 + make install + popd + - name: Build CDEPS + run: | + mkdir cdepsbld + cd cdepsbld + cmake -DPIO=/usr ../ + make VERBOSE=1 From b355a68d0c7ca7991ee0158e97aa36b51b0e206f Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Thu, 6 Aug 2020 15:46:43 -0600 Subject: [PATCH 025/153] try again --- .github/workflows/extbuild.yml | 4 ++-- cime_config/buildlib | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index f9cc89a9e..1c7f2f4e8 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -44,7 +44,7 @@ jobs: tar -xzvf pio-2.5.1.tar.gz mkdir build cd build - cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off ../pio-2.5.1 + cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=`pwd`/pio -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off ../pio-2.5.1 make VERBOSE=1 make install popd @@ -52,5 +52,5 @@ jobs: run: | mkdir cdepsbld cd cdepsbld - cmake -DPIO=/usr ../ + cmake -DPIO=`pwd`/../build/pio ../ make VERBOSE=1 diff --git a/cime_config/buildlib b/cime_config/buildlib index d6f460072..5ab48bea7 100755 --- a/cime_config/buildlib +++ b/cime_config/buildlib @@ -22,7 +22,6 @@ logger = logging.getLogger(__name__) def buildlib(bldroot, libroot, case, compname=None): if bldroot.endswith("obj") and not compname: compname = os.path.basename(os.path.abspath(os.path.join(bldroot,os.pardir))) - print "HERE compname is {} libroot={} bldroot={}".format(compname, libroot, bldroot) if case.get_value("DEBUG"): strdebug = "debug" From e4b106208ddd43fe7a433bed462a360819d088d1 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Thu, 6 Aug 2020 16:09:55 -0600 Subject: [PATCH 026/153] add esmf build --- .github/workflows/extbuild.yml | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index 1c7f2f4e8..2823e0de1 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -44,13 +44,21 @@ jobs: tar -xzvf pio-2.5.1.tar.gz mkdir build cd build - cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=`pwd`/pio -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off ../pio-2.5.1 + cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=../pio -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off ../pio-2.5.1 make VERBOSE=1 make install popd - - name: Build CDEPS + - name: Build ESMF run: | - mkdir cdepsbld - cd cdepsbld - cmake -DPIO=`pwd`/../build/pio ../ - make VERBOSE=1 + wget https://github.com/esmf-org/esmf/archive/ESMF_8_1_0_beta_snapshot_25.tar.gz + tar -xzvf ESMF_8_1_0_beta_snapshot_25.tar.gz + cd esmf-ESMF_8_1_0_beta_snapshot_25 + make ESMF_COMM=openmpi ESMF_DIR='pwd' ESMF_YAMLCPP="internal" + popd +# - name: Build CDEPS +# run: | +# mkdir cdepsbld +# cd cdepsbld +# export ESMFMKFILE= +# cmake -DPIO=../pio/ +# make VERBOSE=1 From 83c2a60e1bb07e0bf95901e6a2267db038601bbb Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Thu, 6 Aug 2020 16:14:54 -0600 Subject: [PATCH 027/153] no tabs --- .github/workflows/extbuild.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index 2823e0de1..a1a901cd6 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -52,9 +52,9 @@ jobs: run: | wget https://github.com/esmf-org/esmf/archive/ESMF_8_1_0_beta_snapshot_25.tar.gz tar -xzvf ESMF_8_1_0_beta_snapshot_25.tar.gz - cd esmf-ESMF_8_1_0_beta_snapshot_25 - make ESMF_COMM=openmpi ESMF_DIR='pwd' ESMF_YAMLCPP="internal" - popd + cd esmf-ESMF_8_1_0_beta_snapshot_25 + make ESMF_COMM=openmpi ESMF_DIR='pwd' ESMF_YAMLCPP="internal" + popd # - name: Build CDEPS # run: | # mkdir cdepsbld From dcc1d5263f3563e0f9bdfc313f6354b0648bcdda Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Thu, 6 Aug 2020 16:45:07 -0600 Subject: [PATCH 028/153] more workflow stuff --- .github/workflows/esmfcache.yml | 31 +++++++++++++++++++++++++++++++ .github/workflows/extbuild.yml | 5 ----- 2 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/esmfcache.yml diff --git a/.github/workflows/esmfcache.yml b/.github/workflows/esmfcache.yml new file mode 100644 index 000000000..cdfb2a007 --- /dev/null +++ b/.github/workflows/esmfcache.yml @@ -0,0 +1,31 @@ +name: ESMF Build and Cache + +on: push + +jobs: + build: + runs-on: ubuntu-latest + env: + CC: mpicc + FC: mpifort + CXX: mpicxx + CPPFLAGS: "-I/usr/include -I/usr/local/include" + steps: + - name: Cache ESMF + id: cache-esmf + uses: actions/cache@v2 + with: + path: ESMF + key: ${{ runner.os }}-ESMF + + - name: Installs + -name: ESMF build + if steps.cache-esmf.outputs.cache-hit != 'true' + uses: actions/checkout@v2 + run: | + sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev + wget https://github.com/esmf-org/esmf/archive/ESMF_8_1_0_beta_snapshot_25.tar.gz + tar -xzvf ESMF_8_1_0_beta_snapshot_25.tar.gz + cd esmf-ESMF_8_1_0_beta_snapshot_25 + make ESMF_COMM=openmpi ESMF_DIR='pwd' ESMF_YAMLCPP="internal" ESMF_INSTALL_PREFIX=../ESMF + make install \ No newline at end of file diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index a1a901cd6..7bd2657d8 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -50,11 +50,6 @@ jobs: popd - name: Build ESMF run: | - wget https://github.com/esmf-org/esmf/archive/ESMF_8_1_0_beta_snapshot_25.tar.gz - tar -xzvf ESMF_8_1_0_beta_snapshot_25.tar.gz - cd esmf-ESMF_8_1_0_beta_snapshot_25 - make ESMF_COMM=openmpi ESMF_DIR='pwd' ESMF_YAMLCPP="internal" - popd # - name: Build CDEPS # run: | # mkdir cdepsbld From 5759f6c056fff81d3f8426f1d75cb628871dba23 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Thu, 6 Aug 2020 16:47:03 -0600 Subject: [PATCH 029/153] fix again --- .github/workflows/esmfcache.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/esmfcache.yml b/.github/workflows/esmfcache.yml index cdfb2a007..fdd3a5c23 100644 --- a/.github/workflows/esmfcache.yml +++ b/.github/workflows/esmfcache.yml @@ -18,7 +18,6 @@ jobs: path: ESMF key: ${{ runner.os }}-ESMF - - name: Installs -name: ESMF build if steps.cache-esmf.outputs.cache-hit != 'true' uses: actions/checkout@v2 From b2d5f3a70eea28514bd3933fb946eff8733f6bfe Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Thu, 6 Aug 2020 16:51:34 -0600 Subject: [PATCH 030/153] fix format --- .github/workflows/esmfcache.yml | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/.github/workflows/esmfcache.yml b/.github/workflows/esmfcache.yml index fdd3a5c23..c794f35c5 100644 --- a/.github/workflows/esmfcache.yml +++ b/.github/workflows/esmfcache.yml @@ -17,14 +17,13 @@ jobs: with: path: ESMF key: ${{ runner.os }}-ESMF - - -name: ESMF build - if steps.cache-esmf.outputs.cache-hit != 'true' - uses: actions/checkout@v2 - run: | - sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev - wget https://github.com/esmf-org/esmf/archive/ESMF_8_1_0_beta_snapshot_25.tar.gz - tar -xzvf ESMF_8_1_0_beta_snapshot_25.tar.gz - cd esmf-ESMF_8_1_0_beta_snapshot_25 - make ESMF_COMM=openmpi ESMF_DIR='pwd' ESMF_YAMLCPP="internal" ESMF_INSTALL_PREFIX=../ESMF - make install \ No newline at end of file + - name: ESMF build + if steps.cache-esmf.outputs.cache-hit != 'true' + uses: actions/checkout@v2 + run: | + sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev + wget https://github.com/esmf-org/esmf/archive/ESMF_8_1_0_beta_snapshot_25.tar.gz + tar -xzvf ESMF_8_1_0_beta_snapshot_25.tar.gz + cd esmf-ESMF_8_1_0_beta_snapshot_25 + make ESMF_COMM=openmpi ESMF_DIR='pwd' ESMF_YAMLCPP="internal" ESMF_INSTALL_PREFIX=../ESMF + make install \ No newline at end of file From d17f05dc9ae8a1ebecd611f50f2e97da45c002d7 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Thu, 6 Aug 2020 16:53:24 -0600 Subject: [PATCH 031/153] add : --- .github/workflows/esmfcache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/esmfcache.yml b/.github/workflows/esmfcache.yml index c794f35c5..6e658c084 100644 --- a/.github/workflows/esmfcache.yml +++ b/.github/workflows/esmfcache.yml @@ -18,7 +18,7 @@ jobs: path: ESMF key: ${{ runner.os }}-ESMF - name: ESMF build - if steps.cache-esmf.outputs.cache-hit != 'true' + if: steps.cache-esmf.outputs.cache-hit != 'true' uses: actions/checkout@v2 run: | sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev From f16271c0e596e27637374cab8ec0f20e467d5143 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Thu, 6 Aug 2020 16:56:34 -0600 Subject: [PATCH 032/153] try again --- .github/workflows/esmfcache.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/esmfcache.yml b/.github/workflows/esmfcache.yml index 6e658c084..3c96e3e5b 100644 --- a/.github/workflows/esmfcache.yml +++ b/.github/workflows/esmfcache.yml @@ -11,15 +11,14 @@ jobs: CXX: mpicxx CPPFLAGS: "-I/usr/include -I/usr/local/include" steps: + - uses: actions/cache@v2 actions/checkout@v2 - name: Cache ESMF id: cache-esmf - uses: actions/cache@v2 with: path: ESMF key: ${{ runner.os }}-ESMF - name: ESMF build if: steps.cache-esmf.outputs.cache-hit != 'true' - uses: actions/checkout@v2 run: | sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev wget https://github.com/esmf-org/esmf/archive/ESMF_8_1_0_beta_snapshot_25.tar.gz From 60806025172302d9927418a1480d26f466ff52d8 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Thu, 6 Aug 2020 16:58:19 -0600 Subject: [PATCH 033/153] try again --- .github/workflows/esmfcache.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/esmfcache.yml b/.github/workflows/esmfcache.yml index 3c96e3e5b..d759ec3c1 100644 --- a/.github/workflows/esmfcache.yml +++ b/.github/workflows/esmfcache.yml @@ -11,9 +11,10 @@ jobs: CXX: mpicxx CPPFLAGS: "-I/usr/include -I/usr/local/include" steps: - - uses: actions/cache@v2 actions/checkout@v2 + - uses: actions/checkout@v2 - name: Cache ESMF id: cache-esmf + uses: actions/cache@v2 with: path: ESMF key: ${{ runner.os }}-ESMF From b2977c9ddb2bd765be51e40444bbb1061ddd0cbe Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Thu, 6 Aug 2020 17:00:50 -0600 Subject: [PATCH 034/153] try again --- .github/workflows/esmfcache.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/esmfcache.yml b/.github/workflows/esmfcache.yml index d759ec3c1..e4bd865c7 100644 --- a/.github/workflows/esmfcache.yml +++ b/.github/workflows/esmfcache.yml @@ -25,5 +25,5 @@ jobs: wget https://github.com/esmf-org/esmf/archive/ESMF_8_1_0_beta_snapshot_25.tar.gz tar -xzvf ESMF_8_1_0_beta_snapshot_25.tar.gz cd esmf-ESMF_8_1_0_beta_snapshot_25 - make ESMF_COMM=openmpi ESMF_DIR='pwd' ESMF_YAMLCPP="internal" ESMF_INSTALL_PREFIX=../ESMF + make ESMF_COMM=openmpi ESMF_DIR=`pwd` ESMF_YAMLCPP="internal" ESMF_INSTALL_PREFIX=../ESMF make install \ No newline at end of file From e7581b9c05f1efbea8c29314e74077f64256ce32 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Thu, 6 Aug 2020 17:46:43 -0600 Subject: [PATCH 035/153] try again --- .github/workflows/esmfcache.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/esmfcache.yml b/.github/workflows/esmfcache.yml index e4bd865c7..8290e423e 100644 --- a/.github/workflows/esmfcache.yml +++ b/.github/workflows/esmfcache.yml @@ -25,5 +25,6 @@ jobs: wget https://github.com/esmf-org/esmf/archive/ESMF_8_1_0_beta_snapshot_25.tar.gz tar -xzvf ESMF_8_1_0_beta_snapshot_25.tar.gz cd esmf-ESMF_8_1_0_beta_snapshot_25 - make ESMF_COMM=openmpi ESMF_DIR=`pwd` ESMF_YAMLCPP="internal" ESMF_INSTALL_PREFIX=../ESMF + export ESMF_DIR=`pwd` + make ESMF_COMM=openmpi ESMF_YAMLCPP="internal" ESMF_INSTALL_PREFIX=../ESMF make install \ No newline at end of file From 908f61de76c55f79eef0c338a9cb861737bba39b Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 07:54:55 -0600 Subject: [PATCH 036/153] redo esmf build --- .github/workflows/esmfcache.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/esmfcache.yml b/.github/workflows/esmfcache.yml index 8290e423e..2878ddc16 100644 --- a/.github/workflows/esmfcache.yml +++ b/.github/workflows/esmfcache.yml @@ -26,5 +26,7 @@ jobs: tar -xzvf ESMF_8_1_0_beta_snapshot_25.tar.gz cd esmf-ESMF_8_1_0_beta_snapshot_25 export ESMF_DIR=`pwd` - make ESMF_COMM=openmpi ESMF_YAMLCPP="internal" ESMF_INSTALL_PREFIX=../ESMF + export ESMF_COMM=openmpi + export ESMF_YAMLCPP="internal" + export ESMF_INSTALL_PREFIX=../ESMF make install \ No newline at end of file From ba35a4bca322b89d993e87d44a134f94fb517990 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 07:56:19 -0600 Subject: [PATCH 037/153] redo esmf build --- .github/workflows/esmfcache.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/esmfcache.yml b/.github/workflows/esmfcache.yml index 2878ddc16..431e65756 100644 --- a/.github/workflows/esmfcache.yml +++ b/.github/workflows/esmfcache.yml @@ -26,7 +26,7 @@ jobs: tar -xzvf ESMF_8_1_0_beta_snapshot_25.tar.gz cd esmf-ESMF_8_1_0_beta_snapshot_25 export ESMF_DIR=`pwd` - export ESMF_COMM=openmpi - export ESMF_YAMLCPP="internal" - export ESMF_INSTALL_PREFIX=../ESMF + export ESMF_COMM=openmpi + export ESMF_YAMLCPP="internal" + export ESMF_INSTALL_PREFIX=../ESMF make install \ No newline at end of file From 07c0ba9e307045179f5258703dfeeaffaeb7e5f0 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 08:10:21 -0600 Subject: [PATCH 038/153] redo esmf build --- .github/workflows/esmfcache.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/esmfcache.yml b/.github/workflows/esmfcache.yml index 431e65756..918c4dcc6 100644 --- a/.github/workflows/esmfcache.yml +++ b/.github/workflows/esmfcache.yml @@ -29,4 +29,5 @@ jobs: export ESMF_COMM=openmpi export ESMF_YAMLCPP="internal" export ESMF_INSTALL_PREFIX=../ESMF + make make install \ No newline at end of file From 69683b9ac894a40a6823507230c2d74fb6f9e3ab Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 08:44:46 -0600 Subject: [PATCH 039/153] put it together --- .github/workflows/esmfcache.yml | 33 ---------- .github/workflows/extbuild.yml | 103 +++++++++++++++++++++++++------- 2 files changed, 80 insertions(+), 56 deletions(-) delete mode 100644 .github/workflows/esmfcache.yml diff --git a/.github/workflows/esmfcache.yml b/.github/workflows/esmfcache.yml deleted file mode 100644 index 918c4dcc6..000000000 --- a/.github/workflows/esmfcache.yml +++ /dev/null @@ -1,33 +0,0 @@ -name: ESMF Build and Cache - -on: push - -jobs: - build: - runs-on: ubuntu-latest - env: - CC: mpicc - FC: mpifort - CXX: mpicxx - CPPFLAGS: "-I/usr/include -I/usr/local/include" - steps: - - uses: actions/checkout@v2 - - name: Cache ESMF - id: cache-esmf - uses: actions/cache@v2 - with: - path: ESMF - key: ${{ runner.os }}-ESMF - - name: ESMF build - if: steps.cache-esmf.outputs.cache-hit != 'true' - run: | - sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev - wget https://github.com/esmf-org/esmf/archive/ESMF_8_1_0_beta_snapshot_25.tar.gz - tar -xzvf ESMF_8_1_0_beta_snapshot_25.tar.gz - cd esmf-ESMF_8_1_0_beta_snapshot_25 - export ESMF_DIR=`pwd` - export ESMF_COMM=openmpi - export ESMF_YAMLCPP="internal" - export ESMF_INSTALL_PREFIX=../ESMF - make - make install \ No newline at end of file diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index 7bd2657d8..706838bfd 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -12,8 +12,40 @@ on: # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: - # This workflow contains a single job called "build" - build: + # Build the ESMF library, if the cache contains a previous build it will be used instead + esmf-build: + runs-on: ubuntu-latest + env: + CC: mpicc + FC: mpifort + CXX: mpicxx + CPPFLAGS: "-I/usr/include -I/usr/local/include" + steps: + - uses: actions/checkout@v2 + - name: Cache ESMF + id: cache-esmf + uses: actions/cache@v2 + with: + path: ESMF + key: ${{ runner.os }}-ESMF + - name: ESMF build + if: steps.cache-esmf.outputs.cache-hit != 'true' + run: | + sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev + wget https://github.com/esmf-org/esmf/archive/ESMF_8_1_0_beta_snapshot_25.tar.gz + tar -xzvf ESMF_8_1_0_beta_snapshot_25.tar.gz + cd esmf-ESMF_8_1_0_beta_snapshot_25 + export ESMF_DIR=`pwd` + export ESMF_COMM=openmpi + export ESMF_YAMLCPP="internal" + export ESMF_INSTALL_PREFIX=../ESMF + export ESMF_BOPT=g + make + make install + + + # Build the pnetcdf library, if the cache contains a previous build it will be used instead + pnetcdf-build: # The type of runner that the job will run on runs-on: ubuntu-latest env: @@ -27,29 +59,54 @@ jobs: # Runs a single command using the runners shell - name: Installs - run: sudo apt-get install netcdf-bin libnetcdf-dev gfortran wget openmpi-bin libopenmpi-dev + run: sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev + - name: Cache pnetcdf + id: cache-pnetcdf + uses: actions/cache@v2 + with: + path: pnetcdf + key: ${{ runner.os }}-pnetcdf - name: pnetcdf build - run: | - wget https://parallel-netcdf.github.io/Release/pnetcdf-1.12.1.tar.gz - tar -xzvf pnetcdf-1.12.1.tar.gz - ls -l - pushd pnetcdf-1.12.1 - ./configure --prefix=/usr --enable-shared --disable-cxx - make - sudo make install - popd + if: steps.cache-pnetcdf.outputs.cache-hit != 'true' + run: | + wget https://parallel-netcdf.github.io/Release/pnetcdf-1.12.1.tar.gz + tar -xzvf pnetcdf-1.12.1.tar.gz + ls -l + pushd pnetcdf-1.12.1 + ./configure --prefix=../pnetcdf --enable-shared --disable-cxx + make + sudo make install + popd + # Build the PIO library, if the cache contains a previous build it will be used + pio-build: + runs-on: ubuntu-latest + needs: pnetcdf-build + env: + CC: mpicc + FC: mpifort + CPPFLAGS: "-I/usr/include -I/usr/local/include" + + - name: Installs + run: sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev netcdf-bin libnetcdf-dev + - name: Cache PIO + id: cache-PIO + uses: actions/cache@v2 + with: + path: pio + key: ${{ runner.os }}-pio - name: Build PIO - run: | - wget https://github.com/NCAR/ParallelIO/releases/download/pio_2_5_1/pio-2.5.1.tar.gz - tar -xzvf pio-2.5.1.tar.gz - mkdir build - cd build - cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=../pio -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off ../pio-2.5.1 - make VERBOSE=1 - make install - popd - - name: Build ESMF - run: | + if: steps.cache-PIO.outputs.cache-hit != 'true' + run: | + wget https://github.com/NCAR/ParallelIO/releases/download/pio_2_5_1/pio-2.5.1.tar.gz + tar -xzvf pio-2.5.1.tar.gz + mkdir build + cd build + cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=../pio -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off ../pio-2.5.1 + make VERBOSE=1 + make install + popd +# - name: Build ESMF +# run: | # - name: Build CDEPS # run: | # mkdir cdepsbld From 4969e1d69508c362d20471d2b3c33621f4531d64 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 08:47:02 -0600 Subject: [PATCH 040/153] tabs again --- .github/workflows/extbuild.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index 706838bfd..5b1d1ee09 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -39,7 +39,7 @@ jobs: export ESMF_COMM=openmpi export ESMF_YAMLCPP="internal" export ESMF_INSTALL_PREFIX=../ESMF - export ESMF_BOPT=g + export ESMF_BOPT=g make make install From 7eb716982e7e22579b9711c08cb5274b06b6adba Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 08:54:45 -0600 Subject: [PATCH 041/153] whitespace cleanup --- .github/workflows/extbuild.yml | 74 +++++++++++++++++----------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index 5b1d1ee09..0eb476a1a 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -26,22 +26,22 @@ jobs: id: cache-esmf uses: actions/cache@v2 with: - path: ESMF - key: ${{ runner.os }}-ESMF + path: ESMF + key: ${{ runner.os }}-ESMF - name: ESMF build if: steps.cache-esmf.outputs.cache-hit != 'true' run: | - sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev - wget https://github.com/esmf-org/esmf/archive/ESMF_8_1_0_beta_snapshot_25.tar.gz - tar -xzvf ESMF_8_1_0_beta_snapshot_25.tar.gz - cd esmf-ESMF_8_1_0_beta_snapshot_25 - export ESMF_DIR=`pwd` - export ESMF_COMM=openmpi - export ESMF_YAMLCPP="internal" - export ESMF_INSTALL_PREFIX=../ESMF - export ESMF_BOPT=g - make - make install + sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev + wget https://github.com/esmf-org/esmf/archive/ESMF_8_1_0_beta_snapshot_25.tar.gz + tar -xzvf ESMF_8_1_0_beta_snapshot_25.tar.gz + cd esmf-ESMF_8_1_0_beta_snapshot_25 + export ESMF_DIR=`pwd` + export ESMF_COMM=openmpi + export ESMF_YAMLCPP="internal" + export ESMF_INSTALL_PREFIX=../ESMF + export ESMF_BOPT=g + make + make install # Build the pnetcdf library, if the cache contains a previous build it will be used instead @@ -64,19 +64,19 @@ jobs: id: cache-pnetcdf uses: actions/cache@v2 with: - path: pnetcdf - key: ${{ runner.os }}-pnetcdf + path: pnetcdf + key: ${{ runner.os }}-pnetcdf - name: pnetcdf build - if: steps.cache-pnetcdf.outputs.cache-hit != 'true' - run: | - wget https://parallel-netcdf.github.io/Release/pnetcdf-1.12.1.tar.gz - tar -xzvf pnetcdf-1.12.1.tar.gz - ls -l - pushd pnetcdf-1.12.1 - ./configure --prefix=../pnetcdf --enable-shared --disable-cxx - make - sudo make install - popd + if: steps.cache-pnetcdf.outputs.cache-hit != 'true' + run: | + wget https://parallel-netcdf.github.io/Release/pnetcdf-1.12.1.tar.gz + tar -xzvf pnetcdf-1.12.1.tar.gz + ls -l + pushd pnetcdf-1.12.1 + ./configure --prefix=../pnetcdf --enable-shared --disable-cxx + make + sudo make install + popd # Build the PIO library, if the cache contains a previous build it will be used pio-build: runs-on: ubuntu-latest @@ -92,19 +92,19 @@ jobs: id: cache-PIO uses: actions/cache@v2 with: - path: pio - key: ${{ runner.os }}-pio + path: pio + key: ${{ runner.os }}-pio - name: Build PIO - if: steps.cache-PIO.outputs.cache-hit != 'true' - run: | - wget https://github.com/NCAR/ParallelIO/releases/download/pio_2_5_1/pio-2.5.1.tar.gz - tar -xzvf pio-2.5.1.tar.gz - mkdir build - cd build - cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=../pio -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off ../pio-2.5.1 - make VERBOSE=1 - make install - popd + if: steps.cache-PIO.outputs.cache-hit != 'true' + run: | + wget https://github.com/NCAR/ParallelIO/releases/download/pio_2_5_1/pio-2.5.1.tar.gz + tar -xzvf pio-2.5.1.tar.gz + mkdir build + cd build + cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=../pio -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off ../pio-2.5.1 + make VERBOSE=1 + make install + popd # - name: Build ESMF # run: | # - name: Build CDEPS From b0fc9fed960fb484d9765db1a4034bf52b2274fb Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 09:25:43 -0600 Subject: [PATCH 042/153] reindent and try again --- .github/workflows/extbuild.yml | 161 +++++++++++++++------------------ 1 file changed, 75 insertions(+), 86 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index 0eb476a1a..734259ab7 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -1,47 +1,45 @@ # This is a basic workflow to help you get started with Actions - name: extbuild - # Controls when the action will run. Triggers the workflow on push or pull request # events but only for the master branch on: push: branches: [ master ] - pull_request: - branches: [ master ] + pull_request: + branches: [ master ] -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # Build the ESMF library, if the cache contains a previous build it will be used instead - esmf-build: - runs-on: ubuntu-latest - env: - CC: mpicc - FC: mpifort - CXX: mpicxx - CPPFLAGS: "-I/usr/include -I/usr/local/include" - steps: - - uses: actions/checkout@v2 - - name: Cache ESMF - id: cache-esmf - uses: actions/cache@v2 - with: - path: ESMF - key: ${{ runner.os }}-ESMF - - name: ESMF build - if: steps.cache-esmf.outputs.cache-hit != 'true' - run: | - sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev - wget https://github.com/esmf-org/esmf/archive/ESMF_8_1_0_beta_snapshot_25.tar.gz - tar -xzvf ESMF_8_1_0_beta_snapshot_25.tar.gz - cd esmf-ESMF_8_1_0_beta_snapshot_25 - export ESMF_DIR=`pwd` - export ESMF_COMM=openmpi - export ESMF_YAMLCPP="internal" - export ESMF_INSTALL_PREFIX=../ESMF - export ESMF_BOPT=g - make - make install + # A workflow run is made up of one or more jobs that can run sequentially or in parallel + jobs: + # Build the ESMF library, if the cache contains a previous build it will be used instead + esmf-build: + runs-on: ubuntu-latest + env: + CC: mpicc + FC: mpifort + CXX: mpicxx + CPPFLAGS: "-I/usr/include -I/usr/local/include" + steps: + - uses: actions/checkout@v2 + - name: Cache ESMF + id: cache-esmf + uses: actions/cache@v2 + with: + path: ESMF + key: ${{ runner.os }}-ESMF + - name: ESMF build + if: steps.cache-esmf.outputs.cache-hit != 'true' + run: | + sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev + wget https://github.com/esmf-org/esmf/archive/ESMF_8_1_0_beta_snapshot_25.tar.gz + tar -xzvf ESMF_8_1_0_beta_snapshot_25.tar.gz + cd esmf-ESMF_8_1_0_beta_snapshot_25 + export ESMF_DIR=`pwd` + export ESMF_COMM=openmpi + export ESMF_YAMLCPP="internal" + export ESMF_INSTALL_PREFIX=../ESMF + export ESMF_BOPT=g + make + make install # Build the pnetcdf library, if the cache contains a previous build it will be used instead @@ -54,29 +52,29 @@ jobs: CPPFLAGS: "-I/usr/include -I/usr/local/include" # Steps represent a sequence of tasks that will be executed as part of the job steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2 + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v2 - # Runs a single command using the runners shell - - name: Installs - run: sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev - - name: Cache pnetcdf - id: cache-pnetcdf - uses: actions/cache@v2 - with: - path: pnetcdf - key: ${{ runner.os }}-pnetcdf - - name: pnetcdf build - if: steps.cache-pnetcdf.outputs.cache-hit != 'true' - run: | - wget https://parallel-netcdf.github.io/Release/pnetcdf-1.12.1.tar.gz - tar -xzvf pnetcdf-1.12.1.tar.gz - ls -l - pushd pnetcdf-1.12.1 - ./configure --prefix=../pnetcdf --enable-shared --disable-cxx - make - sudo make install - popd + # Runs a single command using the runners shell + - name: Installs + run: sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev + - name: Cache pnetcdf + id: cache-pnetcdf + uses: actions/cache@v2 + with: + path: pnetcdf + key: ${{ runner.os }}-pnetcdf + - name: pnetcdf build + if: steps.cache-pnetcdf.outputs.cache-hit != 'true' + run: | + wget https://parallel-netcdf.github.io/Release/pnetcdf-1.12.1.tar.gz + tar -xzvf pnetcdf-1.12.1.tar.gz + ls -l + pushd pnetcdf-1.12.1 + ./configure --prefix=../pnetcdf --enable-shared --disable-cxx + make + sudo make install + popd # Build the PIO library, if the cache contains a previous build it will be used pio-build: runs-on: ubuntu-latest @@ -86,31 +84,22 @@ jobs: FC: mpifort CPPFLAGS: "-I/usr/include -I/usr/local/include" - - name: Installs - run: sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev netcdf-bin libnetcdf-dev - - name: Cache PIO - id: cache-PIO - uses: actions/cache@v2 - with: - path: pio - key: ${{ runner.os }}-pio - - name: Build PIO - if: steps.cache-PIO.outputs.cache-hit != 'true' - run: | - wget https://github.com/NCAR/ParallelIO/releases/download/pio_2_5_1/pio-2.5.1.tar.gz - tar -xzvf pio-2.5.1.tar.gz - mkdir build - cd build - cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=../pio -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off ../pio-2.5.1 - make VERBOSE=1 - make install - popd -# - name: Build ESMF -# run: | -# - name: Build CDEPS -# run: | -# mkdir cdepsbld -# cd cdepsbld -# export ESMFMKFILE= -# cmake -DPIO=../pio/ -# make VERBOSE=1 + - name: Installs + run: sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev netcdf-bin libnetcdf-dev + - name: Cache PIO + id: cache-PIO + uses: actions/cache@v2 + with: + path: pio + key: ${{ runner.os }}-pio + - name: Build PIO + if: steps.cache-PIO.outputs.cache-hit != 'true' + run: | + wget https://github.com/NCAR/ParallelIO/releases/download/pio_2_5_1/pio-2.5.1.tar.gz + tar -xzvf pio-2.5.1.tar.gz + mkdir build + cd build + cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=../pio -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off ../pio-2.5.1 + make VERBOSE=1 + make install + popd From dd647f07ab96736f2d939511ded480432b3e2601 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 09:40:32 -0600 Subject: [PATCH 043/153] try a smaller piece --- .github/workflows/extbuild.yml | 122 ++++++++++++++++----------------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index 734259ab7..6bf135511 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -5,41 +5,41 @@ name: extbuild on: push: branches: [ master ] - pull_request: - branches: [ master ] + pull_request: + branches: [ master ] - # A workflow run is made up of one or more jobs that can run sequentially or in parallel - jobs: - # Build the ESMF library, if the cache contains a previous build it will be used instead - esmf-build: - runs-on: ubuntu-latest - env: - CC: mpicc - FC: mpifort - CXX: mpicxx - CPPFLAGS: "-I/usr/include -I/usr/local/include" - steps: - - uses: actions/checkout@v2 - - name: Cache ESMF - id: cache-esmf - uses: actions/cache@v2 - with: - path: ESMF - key: ${{ runner.os }}-ESMF - - name: ESMF build - if: steps.cache-esmf.outputs.cache-hit != 'true' - run: | - sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev - wget https://github.com/esmf-org/esmf/archive/ESMF_8_1_0_beta_snapshot_25.tar.gz - tar -xzvf ESMF_8_1_0_beta_snapshot_25.tar.gz - cd esmf-ESMF_8_1_0_beta_snapshot_25 - export ESMF_DIR=`pwd` - export ESMF_COMM=openmpi - export ESMF_YAMLCPP="internal" - export ESMF_INSTALL_PREFIX=../ESMF - export ESMF_BOPT=g - make - make install + # A workflow run is made up of one or more jobs that can run sequentially or in parallel + jobs: + # Build the ESMF library, if the cache contains a previous build it will be used instead + esmf-build: + runs-on: ubuntu-latest + env: + CC: mpicc + FC: mpifort + CXX: mpicxx + CPPFLAGS: "-I/usr/include -I/usr/local/include" + steps: + - uses: actions/checkout@v2 + - name: Cache ESMF + id: cache-esmf + uses: actions/cache@v2 + with: + path: ESMF + key: ${{ runner.os }}-ESMF + - name: ESMF build + if: steps.cache-esmf.outputs.cache-hit != 'true' + run: | + sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev + wget https://github.com/esmf-org/esmf/archive/ESMF_8_1_0_beta_snapshot_25.tar.gz + tar -xzvf ESMF_8_1_0_beta_snapshot_25.tar.gz + cd esmf-ESMF_8_1_0_beta_snapshot_25 + export ESMF_DIR=`pwd` + export ESMF_COMM=openmpi + export ESMF_YAMLCPP="internal" + export ESMF_INSTALL_PREFIX=../ESMF + export ESMF_BOPT=g + make + make install # Build the pnetcdf library, if the cache contains a previous build it will be used instead @@ -76,30 +76,30 @@ on: sudo make install popd # Build the PIO library, if the cache contains a previous build it will be used - pio-build: - runs-on: ubuntu-latest - needs: pnetcdf-build - env: - CC: mpicc - FC: mpifort - CPPFLAGS: "-I/usr/include -I/usr/local/include" - - - name: Installs - run: sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev netcdf-bin libnetcdf-dev - - name: Cache PIO - id: cache-PIO - uses: actions/cache@v2 - with: - path: pio - key: ${{ runner.os }}-pio - - name: Build PIO - if: steps.cache-PIO.outputs.cache-hit != 'true' - run: | - wget https://github.com/NCAR/ParallelIO/releases/download/pio_2_5_1/pio-2.5.1.tar.gz - tar -xzvf pio-2.5.1.tar.gz - mkdir build - cd build - cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=../pio -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off ../pio-2.5.1 - make VERBOSE=1 - make install - popd +# pio-build: +# runs-on: ubuntu-latest +# needs: pnetcdf-build +# env: +# CC: mpicc +# FC: mpifort +# CPPFLAGS: "-I/usr/include -I/usr/local/include" +# +# - name: Installs +# run: sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev netcdf-bin libnetcdf-dev +# - name: Cache PIO +# id: cache-PIO +# uses: actions/cache@v2 +# with: +# path: pio +# key: ${{ runner.os }}-pio +# - name: Build PIO +# if: steps.cache-PIO.outputs.cache-hit != 'true' +# run: | +# wget https://github.com/NCAR/ParallelIO/releases/download/pio_2_5_1/pio-2.5.1.tar.gz +# tar -xzvf pio-2.5.1.tar.gz +# mkdir build +# cd build +# cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=../pio -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off ../pio-2.5.1 +# make VERBOSE=1 +# make install +# popd From c47d1968ddef7f2fa723ca8e0ddae7796d82863d Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 10:22:38 -0600 Subject: [PATCH 044/153] fix indentation issues --- .github/workflows/extbuild.yml | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index 6bf135511..dff9a2be4 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -58,23 +58,23 @@ on: # Runs a single command using the runners shell - name: Installs run: sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev - - name: Cache pnetcdf - id: cache-pnetcdf - uses: actions/cache@v2 - with: - path: pnetcdf - key: ${{ runner.os }}-pnetcdf - - name: pnetcdf build - if: steps.cache-pnetcdf.outputs.cache-hit != 'true' - run: | - wget https://parallel-netcdf.github.io/Release/pnetcdf-1.12.1.tar.gz - tar -xzvf pnetcdf-1.12.1.tar.gz - ls -l - pushd pnetcdf-1.12.1 - ./configure --prefix=../pnetcdf --enable-shared --disable-cxx - make - sudo make install - popd + - name: Cache pnetcdf + id: cache-pnetcdf + uses: actions/cache@v2 + with: + path: pnetcdf + key: ${{ runner.os }}-pnetcdf + - name: pnetcdf build + if: steps.cache-pnetcdf.outputs.cache-hit != 'true' + run: | + wget https://parallel-netcdf.github.io/Release/pnetcdf-1.12.1.tar.gz + tar -xzvf pnetcdf-1.12.1.tar.gz + ls -l + pushd pnetcdf-1.12.1 + ./configure --prefix=../pnetcdf --enable-shared --disable-cxx + make + sudo make install + popd # Build the PIO library, if the cache contains a previous build it will be used # pio-build: # runs-on: ubuntu-latest From 516e500a15c5a4614aab106d81440be44b4d67c8 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 10:26:56 -0600 Subject: [PATCH 045/153] more indentation issues --- .github/workflows/extbuild.yml | 70 +++++++++++++++++----------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index dff9a2be4..fa33d8dfc 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -32,7 +32,7 @@ on: sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev wget https://github.com/esmf-org/esmf/archive/ESMF_8_1_0_beta_snapshot_25.tar.gz tar -xzvf ESMF_8_1_0_beta_snapshot_25.tar.gz - cd esmf-ESMF_8_1_0_beta_snapshot_25 + pushd esmf-ESMF_8_1_0_beta_snapshot_25 export ESMF_DIR=`pwd` export ESMF_COMM=openmpi export ESMF_YAMLCPP="internal" @@ -40,42 +40,42 @@ on: export ESMF_BOPT=g make make install + popd + # Build the pnetcdf library, if the cache contains a previous build it will be used instead + pnetcdf-build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + env: + CC: mpicc + FC: mpifort + CPPFLAGS: "-I/usr/include -I/usr/local/include" + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v2 + # Runs a single command using the runners shell + - name: Installs + run: sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev + - name: Cache pnetcdf + id: cache-pnetcdf + uses: actions/cache@v2 + with: + path: pnetcdf + key: ${{ runner.os }}-pnetcdf + - name: pnetcdf build + if: steps.cache-pnetcdf.outputs.cache-hit != 'true' + run: | + wget https://parallel-netcdf.github.io/Release/pnetcdf-1.12.1.tar.gz + tar -xzvf pnetcdf-1.12.1.tar.gz + ls -l + pushd pnetcdf-1.12.1 + ./configure --prefix=../pnetcdf --enable-shared --disable-cxx + make + sudo make install + popd - # Build the pnetcdf library, if the cache contains a previous build it will be used instead - pnetcdf-build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - env: - CC: mpicc - FC: mpifort - CPPFLAGS: "-I/usr/include -I/usr/local/include" - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2 - - # Runs a single command using the runners shell - - name: Installs - run: sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev - - name: Cache pnetcdf - id: cache-pnetcdf - uses: actions/cache@v2 - with: - path: pnetcdf - key: ${{ runner.os }}-pnetcdf - - name: pnetcdf build - if: steps.cache-pnetcdf.outputs.cache-hit != 'true' - run: | - wget https://parallel-netcdf.github.io/Release/pnetcdf-1.12.1.tar.gz - tar -xzvf pnetcdf-1.12.1.tar.gz - ls -l - pushd pnetcdf-1.12.1 - ./configure --prefix=../pnetcdf --enable-shared --disable-cxx - make - sudo make install - popd - # Build the PIO library, if the cache contains a previous build it will be used +# Build the PIO library, if the cache contains a previous build it will be used # pio-build: # runs-on: ubuntu-latest # needs: pnetcdf-build From 32cb41d171a0f8947977ece488346de2f371b193 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 10:40:06 -0600 Subject: [PATCH 046/153] update fox cmake defaults --- fox | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fox b/fox index 5744eac4c..a2a181efd 160000 --- a/fox +++ b/fox @@ -1 +1 @@ -Subproject commit 5744eac4c533925a13bc5740861d40e343e91989 +Subproject commit a2a181efd1606cc85fd5f0cce5da7d643af1cac5 From 968b57c6853309a2518e52602dbd73902955fb68 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 10:41:14 -0600 Subject: [PATCH 047/153] try again --- .github/workflows/extbuild.yml | 130 ++++++++++++++++----------------- 1 file changed, 65 insertions(+), 65 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index fa33d8dfc..f3e4e08ad 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -8,72 +8,72 @@ on: pull_request: branches: [ master ] - # A workflow run is made up of one or more jobs that can run sequentially or in parallel - jobs: - # Build the ESMF library, if the cache contains a previous build it will be used instead - esmf-build: - runs-on: ubuntu-latest - env: - CC: mpicc - FC: mpifort - CXX: mpicxx - CPPFLAGS: "-I/usr/include -I/usr/local/include" - steps: - - uses: actions/checkout@v2 - - name: Cache ESMF - id: cache-esmf - uses: actions/cache@v2 - with: - path: ESMF - key: ${{ runner.os }}-ESMF - - name: ESMF build - if: steps.cache-esmf.outputs.cache-hit != 'true' - run: | - sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev - wget https://github.com/esmf-org/esmf/archive/ESMF_8_1_0_beta_snapshot_25.tar.gz - tar -xzvf ESMF_8_1_0_beta_snapshot_25.tar.gz - pushd esmf-ESMF_8_1_0_beta_snapshot_25 - export ESMF_DIR=`pwd` - export ESMF_COMM=openmpi - export ESMF_YAMLCPP="internal" - export ESMF_INSTALL_PREFIX=../ESMF - export ESMF_BOPT=g - make - make install - popd +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # Build the ESMF library, if the cache contains a previous build it will be used instead + esmf-build: + runs-on: ubuntu-latest + env: + CC: mpicc + FC: mpifort + CXX: mpicxx + CPPFLAGS: "-I/usr/include -I/usr/local/include" + steps: + - uses: actions/checkout@v2 + - name: Cache ESMF + id: cache-esmf + uses: actions/cache@v2 + with: + path: ESMF + key: ${{ runner.os }}-ESMF + - name: ESMF build + if: steps.cache-esmf.outputs.cache-hit != 'true' + run: | + sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev + wget https://github.com/esmf-org/esmf/archive/ESMF_8_1_0_beta_snapshot_25.tar.gz + tar -xzvf ESMF_8_1_0_beta_snapshot_25.tar.gz + pushd esmf-ESMF_8_1_0_beta_snapshot_25 + export ESMF_DIR=`pwd` + export ESMF_COMM=openmpi + export ESMF_YAMLCPP="internal" + export ESMF_INSTALL_PREFIX=../ESMF + export ESMF_BOPT=g + make + make install + popd - # Build the pnetcdf library, if the cache contains a previous build it will be used instead - pnetcdf-build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - env: - CC: mpicc - FC: mpifort - CPPFLAGS: "-I/usr/include -I/usr/local/include" - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2 - # Runs a single command using the runners shell - - name: Installs - run: sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev - - name: Cache pnetcdf - id: cache-pnetcdf - uses: actions/cache@v2 - with: - path: pnetcdf - key: ${{ runner.os }}-pnetcdf - - name: pnetcdf build - if: steps.cache-pnetcdf.outputs.cache-hit != 'true' - run: | - wget https://parallel-netcdf.github.io/Release/pnetcdf-1.12.1.tar.gz - tar -xzvf pnetcdf-1.12.1.tar.gz - ls -l - pushd pnetcdf-1.12.1 - ./configure --prefix=../pnetcdf --enable-shared --disable-cxx - make - sudo make install - popd + # Build the pnetcdf library, if the cache contains a previous build it will be used instead + pnetcdf-build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + env: + CC: mpicc + FC: mpifort + CPPFLAGS: "-I/usr/include -I/usr/local/include" + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v2 + # Runs a single command using the runners shell + - name: Installs + run: sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev + - name: Cache pnetcdf + id: cache-pnetcdf + uses: actions/cache@v2 + with: + path: pnetcdf + key: ${{ runner.os }}-pnetcdf + - name: pnetcdf build + if: steps.cache-pnetcdf.outputs.cache-hit != 'true' + run: | + wget https://parallel-netcdf.github.io/Release/pnetcdf-1.12.1.tar.gz + tar -xzvf pnetcdf-1.12.1.tar.gz + ls -l + pushd pnetcdf-1.12.1 + ./configure --prefix=../pnetcdf --enable-shared --disable-cxx + make + sudo make install + popd # Build the PIO library, if the cache contains a previous build it will be used # pio-build: From cda2c8889aa0b8f29f2a1195ad3973fd03d0b77a Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 10:43:54 -0600 Subject: [PATCH 048/153] getting closer --- .github/workflows/extbuild.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index f3e4e08ad..7e1b2b46c 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -36,7 +36,7 @@ jobs: export ESMF_DIR=`pwd` export ESMF_COMM=openmpi export ESMF_YAMLCPP="internal" - export ESMF_INSTALL_PREFIX=../ESMF + export ESMF_INSTALL_PREFIX=$ESMF_DIR/../ESMF export ESMF_BOPT=g make make install @@ -70,7 +70,7 @@ jobs: tar -xzvf pnetcdf-1.12.1.tar.gz ls -l pushd pnetcdf-1.12.1 - ./configure --prefix=../pnetcdf --enable-shared --disable-cxx + ./configure --prefix=`pwd`/pnetcdf --enable-shared --disable-cxx make sudo make install popd From c561e948ca1f986c61bdb15915c42053862541ad Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 11:07:25 -0600 Subject: [PATCH 049/153] add pio build --- .github/workflows/extbuild.yml | 55 +++++++++++++++++----------------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index 7e1b2b46c..c8b70939d 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -76,30 +76,31 @@ jobs: popd # Build the PIO library, if the cache contains a previous build it will be used -# pio-build: -# runs-on: ubuntu-latest -# needs: pnetcdf-build -# env: -# CC: mpicc -# FC: mpifort -# CPPFLAGS: "-I/usr/include -I/usr/local/include" -# -# - name: Installs -# run: sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev netcdf-bin libnetcdf-dev -# - name: Cache PIO -# id: cache-PIO -# uses: actions/cache@v2 -# with: -# path: pio -# key: ${{ runner.os }}-pio -# - name: Build PIO -# if: steps.cache-PIO.outputs.cache-hit != 'true' -# run: | -# wget https://github.com/NCAR/ParallelIO/releases/download/pio_2_5_1/pio-2.5.1.tar.gz -# tar -xzvf pio-2.5.1.tar.gz -# mkdir build -# cd build -# cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=../pio -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off ../pio-2.5.1 -# make VERBOSE=1 -# make install -# popd + pio-build: + runs-on: ubuntu-latest + needs: pnetcdf-build + env: + CC: mpicc + FC: mpifort + CPPFLAGS: "-I/usr/include -I/usr/local/include" + steps: + - uses: actions/checkout@v2 + - name: Installs + run: sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev netcdf-bin libnetcdf-dev + - name: Cache PIO + id: cache-PIO + uses: actions/cache@v2 + with: + path: pio + key: ${{ runner.os }}-pio + - name: Build PIO + if: steps.cache-PIO.outputs.cache-hit != 'true' + run: | + wget https://github.com/NCAR/ParallelIO/releases/download/pio_2_5_1/pio-2.5.1.tar.gz + tar -xzvf pio-2.5.1.tar.gz + mkdir build + pushd build + cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=../pio -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off ../pio-2.5.1 + make VERBOSE=1 + make install + popd From 3f972b89b5583aea65180de5be721b7aa7fb7a9c Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 11:57:02 -0600 Subject: [PATCH 050/153] add pnetcdf path --- .github/workflows/extbuild.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index c8b70939d..334cb050e 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -100,7 +100,7 @@ jobs: tar -xzvf pio-2.5.1.tar.gz mkdir build pushd build - cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=../pio -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off ../pio-2.5.1 + cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=../pio -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off -DPnetCDF_PATH=../pnetcdf../pio-2.5.1 make VERBOSE=1 make install popd From 5daac8929e955455a752615e8af73f6b3ad0f2d2 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 12:57:15 -0600 Subject: [PATCH 051/153] add netcdf-fortran --- .github/workflows/extbuild.yml | 37 ++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index 334cb050e..ef83f8e37 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -75,10 +75,43 @@ jobs: sudo make install popd + # Build the pnetcdf library, if the cache contains a previous build it will be used instead + netcdf-fortran-build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + env: + CC: mpicc + FC: mpifort + CPPFLAGS: "-I/usr/include -I/usr/local/include" + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v2 + # Runs a single command using the runners shell + - name: Installs + run: sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev netcdf-bin libnetcdf-dev + - name: Cache netcdf-fortran + id: cache-netcdf-fortran + uses: actions/cache@v2 + with: + path: netcdf-fortran + key: ${{ runner.os }}-netcdf-fortran + - name: netcdf fortran build + if: steps.cache-netcdf-fortran.outputs.cache-hit != 'true' + run: | + wget https://github.com/Unidata/netcdf-fortran/archive/v4.5.3.tar.gz + tar -xzvf v4.5.3.tar.gz + ls -l + pushd netcdf-fortran-4.5.3 + ./configure --prefix=`pwd`/../netcdf-fortran + make + make install + popd + # Build the PIO library, if the cache contains a previous build it will be used pio-build: runs-on: ubuntu-latest - needs: pnetcdf-build + needs: [pnetcdf-build, netcdf-fortran-build] env: CC: mpicc FC: mpifort @@ -100,7 +133,7 @@ jobs: tar -xzvf pio-2.5.1.tar.gz mkdir build pushd build - cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=../pio -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off -DPnetCDF_PATH=../pnetcdf../pio-2.5.1 + cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=../pio -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off -DNetCDF_Fortran_PATH=../netcdf-fortran -DPnetCDF_PATH=../pnetcdf../pio-2.5.1 make VERBOSE=1 make install popd From 08c67e90d57ee2f78fa3bf21200c805a3e28aae5 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 12:59:30 -0600 Subject: [PATCH 052/153] fix syntax error --- .github/workflows/extbuild.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index ef83f8e37..b359ff001 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -103,10 +103,10 @@ jobs: tar -xzvf v4.5.3.tar.gz ls -l pushd netcdf-fortran-4.5.3 - ./configure --prefix=`pwd`/../netcdf-fortran - make - make install - popd + ./configure --prefix=`pwd`/../netcdf-fortran + make + make install + popd # Build the PIO library, if the cache contains a previous build it will be used pio-build: From 973bd40f79972e001918c877950b3c69f9312a37 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 13:41:07 -0600 Subject: [PATCH 053/153] find netcdf version --- .github/workflows/extbuild.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index b359ff001..4e75206bb 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -75,7 +75,7 @@ jobs: sudo make install popd - # Build the pnetcdf library, if the cache contains a previous build it will be used instead + # Build the netcdf library, if the cache contains a previous build it will be used instead netcdf-fortran-build: # The type of runner that the job will run on runs-on: ubuntu-latest @@ -99,6 +99,7 @@ jobs: - name: netcdf fortran build if: steps.cache-netcdf-fortran.outputs.cache-hit != 'true' run: | + ncdump --version wget https://github.com/Unidata/netcdf-fortran/archive/v4.5.3.tar.gz tar -xzvf v4.5.3.tar.gz ls -l From 5195033e9d03eab77e7cce001822502fc76c3d11 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 13:49:18 -0600 Subject: [PATCH 054/153] need netcdf-fortran 4.5.2 --- .github/workflows/extbuild.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index 4e75206bb..e4b7db7e0 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -100,10 +100,10 @@ jobs: if: steps.cache-netcdf-fortran.outputs.cache-hit != 'true' run: | ncdump --version - wget https://github.com/Unidata/netcdf-fortran/archive/v4.5.3.tar.gz - tar -xzvf v4.5.3.tar.gz + wget https://github.com/Unidata/netcdf-fortran/archive/v4.5.2.tar.gz + tar -xzvf v4.5.2.tar.gz ls -l - pushd netcdf-fortran-4.5.3 + pushd netcdf-fortran-4.5.2 ./configure --prefix=`pwd`/../netcdf-fortran make make install From e6dc1514104df1ddb19d16c1bced336f5641db77 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 13:51:06 -0600 Subject: [PATCH 055/153] remove debug statement --- .github/workflows/extbuild.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index e4b7db7e0..cced0a5ba 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -99,7 +99,6 @@ jobs: - name: netcdf fortran build if: steps.cache-netcdf-fortran.outputs.cache-hit != 'true' run: | - ncdump --version wget https://github.com/Unidata/netcdf-fortran/archive/v4.5.2.tar.gz tar -xzvf v4.5.2.tar.gz ls -l From b34d98d5ab1795f6f69b06a925c3835da3157ab2 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 13:54:28 -0600 Subject: [PATCH 056/153] another typo fixed --- .github/workflows/extbuild.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index cced0a5ba..907f001a7 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -133,7 +133,7 @@ jobs: tar -xzvf pio-2.5.1.tar.gz mkdir build pushd build - cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=../pio -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off -DNetCDF_Fortran_PATH=../netcdf-fortran -DPnetCDF_PATH=../pnetcdf../pio-2.5.1 + cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=../pio -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off -DNetCDF_Fortran_PATH=../netcdf-fortran -DPnetCDF_PATH=../pnetcdf ../pio-2.5.1 make VERBOSE=1 make install popd From b1165760b37c44da6db813063d67e0730d9d49de Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 13:58:28 -0600 Subject: [PATCH 057/153] debug commit --- .github/workflows/extbuild.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index 907f001a7..26ae37520 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -133,6 +133,8 @@ jobs: tar -xzvf pio-2.5.1.tar.gz mkdir build pushd build + ls ../pnetcdf/lib + ls ../netcdf-fortran/lib cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=../pio -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off -DNetCDF_Fortran_PATH=../netcdf-fortran -DPnetCDF_PATH=../pnetcdf ../pio-2.5.1 make VERBOSE=1 make install From 88462dddf1cd4fb68efc5938d417a5c2530a63ab Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 14:04:03 -0600 Subject: [PATCH 058/153] debug commit --- .github/workflows/extbuild.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index 26ae37520..28cedf2e9 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -133,8 +133,7 @@ jobs: tar -xzvf pio-2.5.1.tar.gz mkdir build pushd build - ls ../pnetcdf/lib - ls ../netcdf-fortran/lib + find ../ -print cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=../pio -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off -DNetCDF_Fortran_PATH=../netcdf-fortran -DPnetCDF_PATH=../pnetcdf ../pio-2.5.1 make VERBOSE=1 make install From 34e4cea397714e8b4c0199b660cfb584dd9e288a Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 14:34:22 -0600 Subject: [PATCH 059/153] update paths --- .github/workflows/extbuild.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index 28cedf2e9..f30dab95e 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -24,7 +24,7 @@ jobs: id: cache-esmf uses: actions/cache@v2 with: - path: ESMF + path: ~/ESMF key: ${{ runner.os }}-ESMF - name: ESMF build if: steps.cache-esmf.outputs.cache-hit != 'true' @@ -36,7 +36,7 @@ jobs: export ESMF_DIR=`pwd` export ESMF_COMM=openmpi export ESMF_YAMLCPP="internal" - export ESMF_INSTALL_PREFIX=$ESMF_DIR/../ESMF + export ESMF_INSTALL_PREFIX=~/ESMF export ESMF_BOPT=g make make install @@ -61,7 +61,7 @@ jobs: id: cache-pnetcdf uses: actions/cache@v2 with: - path: pnetcdf + path: ~/pnetcdf key: ${{ runner.os }}-pnetcdf - name: pnetcdf build if: steps.cache-pnetcdf.outputs.cache-hit != 'true' @@ -70,7 +70,7 @@ jobs: tar -xzvf pnetcdf-1.12.1.tar.gz ls -l pushd pnetcdf-1.12.1 - ./configure --prefix=`pwd`/pnetcdf --enable-shared --disable-cxx + ./configure --prefix=~/pnetcdf --enable-shared --disable-cxx make sudo make install popd @@ -94,7 +94,7 @@ jobs: id: cache-netcdf-fortran uses: actions/cache@v2 with: - path: netcdf-fortran + path: ~/netcdf-fortran key: ${{ runner.os }}-netcdf-fortran - name: netcdf fortran build if: steps.cache-netcdf-fortran.outputs.cache-hit != 'true' @@ -103,7 +103,7 @@ jobs: tar -xzvf v4.5.2.tar.gz ls -l pushd netcdf-fortran-4.5.2 - ./configure --prefix=`pwd`/../netcdf-fortran + ./configure --prefix=~/netcdf-fortran make make install popd @@ -134,7 +134,7 @@ jobs: mkdir build pushd build find ../ -print - cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=../pio -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off -DNetCDF_Fortran_PATH=../netcdf-fortran -DPnetCDF_PATH=../pnetcdf ../pio-2.5.1 + cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=~/pio -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off -DNetCDF_Fortran_PATH=~/netcdf-fortran -DPnetCDF_PATH=~/pnetcdf ../pio-2.5.1 make VERBOSE=1 make install popd From 981487d497fcd5612f8720d066996b30de21db15 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 15:12:20 -0600 Subject: [PATCH 060/153] restoring caches --- .github/workflows/extbuild.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index f30dab95e..fb995f69d 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -126,6 +126,10 @@ jobs: with: path: pio key: ${{ runner.os }}-pio + restore-keys: | + ${{ runner.os }}-netcdf-fortran + ${{ runner.os }}-pnetcdf + ${{ runner.os }}-pio - name: Build PIO if: steps.cache-PIO.outputs.cache-hit != 'true' run: | @@ -133,7 +137,7 @@ jobs: tar -xzvf pio-2.5.1.tar.gz mkdir build pushd build - find ../ -print + find ~/ -print cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=~/pio -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off -DNetCDF_Fortran_PATH=~/netcdf-fortran -DPnetCDF_PATH=~/pnetcdf ../pio-2.5.1 make VERBOSE=1 make install From dd95f0f30472a549dde74f20f5e6989452cf15f8 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 15:14:50 -0600 Subject: [PATCH 061/153] restoring caches --- .github/workflows/extbuild.yml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index fb995f69d..d8166e47d 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -36,7 +36,7 @@ jobs: export ESMF_DIR=`pwd` export ESMF_COMM=openmpi export ESMF_YAMLCPP="internal" - export ESMF_INSTALL_PREFIX=~/ESMF + export ESMF_INSTALL_PREFIX=$HOME/ESMF export ESMF_BOPT=g make make install @@ -70,7 +70,7 @@ jobs: tar -xzvf pnetcdf-1.12.1.tar.gz ls -l pushd pnetcdf-1.12.1 - ./configure --prefix=~/pnetcdf --enable-shared --disable-cxx + ./configure --prefix=$HOME/pnetcdf --enable-shared --disable-cxx make sudo make install popd @@ -103,7 +103,7 @@ jobs: tar -xzvf v4.5.2.tar.gz ls -l pushd netcdf-fortran-4.5.2 - ./configure --prefix=~/netcdf-fortran + ./configure --prefix=$HOME/netcdf-fortran make make install popd @@ -137,8 +137,7 @@ jobs: tar -xzvf pio-2.5.1.tar.gz mkdir build pushd build - find ~/ -print - cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=~/pio -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off -DNetCDF_Fortran_PATH=~/netcdf-fortran -DPnetCDF_PATH=~/pnetcdf ../pio-2.5.1 + cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=$HOME/pio -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off -DNetCDF_Fortran_PATH=$HOME/netcdf-fortran -DPnetCDF_PATH=$HOME/pnetcdf ../pio-2.5.1 make VERBOSE=1 make install popd From 31e67673fb6e7adccc7ce709a0ec9c8d77d8725d Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 15:27:37 -0600 Subject: [PATCH 062/153] add outputs --- .github/workflows/extbuild.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index d8166e47d..8439308ea 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -18,6 +18,7 @@ jobs: FC: mpifort CXX: mpicxx CPPFLAGS: "-I/usr/include -I/usr/local/include" + outputs: $HOME/ESMF steps: - uses: actions/checkout@v2 - name: Cache ESMF @@ -50,6 +51,7 @@ jobs: CC: mpicc FC: mpifort CPPFLAGS: "-I/usr/include -I/usr/local/include" + outputs: $HOME/pnetcdf # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it @@ -83,6 +85,7 @@ jobs: CC: mpicc FC: mpifort CPPFLAGS: "-I/usr/include -I/usr/local/include" + outputs: $HOME/netcdf-fortran # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it @@ -126,10 +129,6 @@ jobs: with: path: pio key: ${{ runner.os }}-pio - restore-keys: | - ${{ runner.os }}-netcdf-fortran - ${{ runner.os }}-pnetcdf - ${{ runner.os }}-pio - name: Build PIO if: steps.cache-PIO.outputs.cache-hit != 'true' run: | From febee8ed86c1907f4eb5db9f6c4d0ba1c4516070 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 15:38:49 -0600 Subject: [PATCH 063/153] add outputs --- .github/workflows/extbuild.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index 8439308ea..e54cf7d8f 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -18,7 +18,7 @@ jobs: FC: mpifort CXX: mpicxx CPPFLAGS: "-I/usr/include -I/usr/local/include" - outputs: $HOME/ESMF + outputs: ${{ steps.cache-esmf.outputs }} steps: - uses: actions/checkout@v2 - name: Cache ESMF @@ -51,7 +51,7 @@ jobs: CC: mpicc FC: mpifort CPPFLAGS: "-I/usr/include -I/usr/local/include" - outputs: $HOME/pnetcdf + outputs: ${{ steps.cache-pnetcdf.outputs }} # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it @@ -85,7 +85,7 @@ jobs: CC: mpicc FC: mpifort CPPFLAGS: "-I/usr/include -I/usr/local/include" - outputs: $HOME/netcdf-fortran + outputs: ${{ steps.cache-netcdf-fortran.outputs }} # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it @@ -132,6 +132,7 @@ jobs: - name: Build PIO if: steps.cache-PIO.outputs.cache-hit != 'true' run: | + echo "${{ needs.pnetcdf-build.outputs }}" wget https://github.com/NCAR/ParallelIO/releases/download/pio_2_5_1/pio-2.5.1.tar.gz tar -xzvf pio-2.5.1.tar.gz mkdir build From 18294ea8c809c2a12466bd57208dbf8e228942a9 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 15:42:22 -0600 Subject: [PATCH 064/153] add outputs --- .github/workflows/extbuild.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index e54cf7d8f..4c1b97d8a 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -20,9 +20,9 @@ jobs: CPPFLAGS: "-I/usr/include -I/usr/local/include" outputs: ${{ steps.cache-esmf.outputs }} steps: + - id: cache-esmf - uses: actions/checkout@v2 - name: Cache ESMF - id: cache-esmf uses: actions/cache@v2 with: path: ~/ESMF @@ -54,13 +54,13 @@ jobs: outputs: ${{ steps.cache-pnetcdf.outputs }} # Steps represent a sequence of tasks that will be executed as part of the job steps: + - id: cache-pnetcdf # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v2 # Runs a single command using the runners shell - name: Installs run: sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev - name: Cache pnetcdf - id: cache-pnetcdf uses: actions/cache@v2 with: path: ~/pnetcdf From 9d75383c6f2daf959eb70857ce45979c9f686c4f Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 15:44:37 -0600 Subject: [PATCH 065/153] Revert "add outputs" This reverts commit 18294ea8c809c2a12466bd57208dbf8e228942a9. --- .github/workflows/extbuild.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index 4c1b97d8a..e54cf7d8f 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -20,9 +20,9 @@ jobs: CPPFLAGS: "-I/usr/include -I/usr/local/include" outputs: ${{ steps.cache-esmf.outputs }} steps: - - id: cache-esmf - uses: actions/checkout@v2 - name: Cache ESMF + id: cache-esmf uses: actions/cache@v2 with: path: ~/ESMF @@ -54,13 +54,13 @@ jobs: outputs: ${{ steps.cache-pnetcdf.outputs }} # Steps represent a sequence of tasks that will be executed as part of the job steps: - - id: cache-pnetcdf # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v2 # Runs a single command using the runners shell - name: Installs run: sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev - name: Cache pnetcdf + id: cache-pnetcdf uses: actions/cache@v2 with: path: ~/pnetcdf From 59f7047befdd6de29807c36596febccad1c82af9 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 15:55:31 -0600 Subject: [PATCH 066/153] add outputs --- .github/workflows/extbuild.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index e54cf7d8f..8c91181f5 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -21,13 +21,12 @@ jobs: outputs: ${{ steps.cache-esmf.outputs }} steps: - uses: actions/checkout@v2 - - name: Cache ESMF - id: cache-esmf + - id: cache-esmf uses: actions/cache@v2 with: path: ~/ESMF key: ${{ runner.os }}-ESMF - - name: ESMF build + - id: build-ESMF if: steps.cache-esmf.outputs.cache-hit != 'true' run: | sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev From d4bfc92f2aeb10a958628cc9c8dfdcb80d9bde21 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 16:07:54 -0600 Subject: [PATCH 067/153] add outputs --- .github/workflows/extbuild.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index 8c91181f5..ce4c7ad2c 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -18,7 +18,6 @@ jobs: FC: mpifort CXX: mpicxx CPPFLAGS: "-I/usr/include -I/usr/local/include" - outputs: ${{ steps.cache-esmf.outputs }} steps: - uses: actions/checkout@v2 - id: cache-esmf @@ -50,7 +49,6 @@ jobs: CC: mpicc FC: mpifort CPPFLAGS: "-I/usr/include -I/usr/local/include" - outputs: ${{ steps.cache-pnetcdf.outputs }} # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it @@ -84,7 +82,6 @@ jobs: CC: mpicc FC: mpifort CPPFLAGS: "-I/usr/include -I/usr/local/include" - outputs: ${{ steps.cache-netcdf-fortran.outputs }} # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it @@ -128,6 +125,9 @@ jobs: with: path: pio key: ${{ runner.os }}-pio + restore-keys: | + ${{ runner.os }}-netcdf-fortran + ${{ runner.os }}-pnetcdf - name: Build PIO if: steps.cache-PIO.outputs.cache-hit != 'true' run: | From e4aeaf9cbb9834cef4e6f7c0569cd6686bcd89a4 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 16:19:17 -0600 Subject: [PATCH 068/153] one job? --- .github/workflows/extbuild.yml | 53 ++-------------------------------- 1 file changed, 3 insertions(+), 50 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index ce4c7ad2c..17f1b694d 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -11,7 +11,7 @@ on: # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: # Build the ESMF library, if the cache contains a previous build it will be used instead - esmf-build: + build-cdeps: runs-on: ubuntu-latest env: CC: mpicc @@ -40,24 +40,7 @@ jobs: make make install popd - - # Build the pnetcdf library, if the cache contains a previous build it will be used instead - pnetcdf-build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - env: - CC: mpicc - FC: mpifort - CPPFLAGS: "-I/usr/include -I/usr/local/include" - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2 - # Runs a single command using the runners shell - - name: Installs - run: sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev - - name: Cache pnetcdf - id: cache-pnetcdf + - id: cache-pnetcdf uses: actions/cache@v2 with: path: ~/pnetcdf @@ -73,22 +56,6 @@ jobs: make sudo make install popd - - # Build the netcdf library, if the cache contains a previous build it will be used instead - netcdf-fortran-build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - env: - CC: mpicc - FC: mpifort - CPPFLAGS: "-I/usr/include -I/usr/local/include" - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2 - # Runs a single command using the runners shell - - name: Installs - run: sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev netcdf-bin libnetcdf-dev - name: Cache netcdf-fortran id: cache-netcdf-fortran uses: actions/cache@v2 @@ -105,25 +72,12 @@ jobs: ./configure --prefix=$HOME/netcdf-fortran make make install - popd -# Build the PIO library, if the cache contains a previous build it will be used - pio-build: - runs-on: ubuntu-latest - needs: [pnetcdf-build, netcdf-fortran-build] - env: - CC: mpicc - FC: mpifort - CPPFLAGS: "-I/usr/include -I/usr/local/include" - steps: - - uses: actions/checkout@v2 - - name: Installs - run: sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev netcdf-bin libnetcdf-dev - name: Cache PIO id: cache-PIO uses: actions/cache@v2 with: - path: pio + path: ~/pio key: ${{ runner.os }}-pio restore-keys: | ${{ runner.os }}-netcdf-fortran @@ -131,7 +85,6 @@ jobs: - name: Build PIO if: steps.cache-PIO.outputs.cache-hit != 'true' run: | - echo "${{ needs.pnetcdf-build.outputs }}" wget https://github.com/NCAR/ParallelIO/releases/download/pio_2_5_1/pio-2.5.1.tar.gz tar -xzvf pio-2.5.1.tar.gz mkdir build From 9d8a59af40be3afb489c25ec9548773ebaad98cb Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 16:26:31 -0600 Subject: [PATCH 069/153] try again --- .github/workflows/extbuild.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index 17f1b694d..a0cf71b0b 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -25,10 +25,12 @@ jobs: with: path: ~/ESMF key: ${{ runner.os }}-ESMF + - id: load-env + run: sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev netcdf-bin libnetcdf-dev + - id: build-ESMF if: steps.cache-esmf.outputs.cache-hit != 'true' run: | - sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev wget https://github.com/esmf-org/esmf/archive/ESMF_8_1_0_beta_snapshot_25.tar.gz tar -xzvf ESMF_8_1_0_beta_snapshot_25.tar.gz pushd esmf-ESMF_8_1_0_beta_snapshot_25 @@ -54,7 +56,7 @@ jobs: pushd pnetcdf-1.12.1 ./configure --prefix=$HOME/pnetcdf --enable-shared --disable-cxx make - sudo make install + make install popd - name: Cache netcdf-fortran id: cache-netcdf-fortran From 654d660e20b78c12b1a50ec032e4fd99aebd4a19 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 16:33:46 -0600 Subject: [PATCH 070/153] now build cdeps --- .github/workflows/extbuild.yml | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index a0cf71b0b..89d76223a 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -89,9 +89,19 @@ jobs: run: | wget https://github.com/NCAR/ParallelIO/releases/download/pio_2_5_1/pio-2.5.1.tar.gz tar -xzvf pio-2.5.1.tar.gz - mkdir build - pushd build + mkdir build-pio + pushd build-pio cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=$HOME/pio -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off -DNetCDF_Fortran_PATH=$HOME/netcdf-fortran -DPnetCDF_PATH=$HOME/pnetcdf ../pio-2.5.1 make VERBOSE=1 make install popd + + - name: Build CDEPS + run: | + git submodule init + git submodule update + mkdir build-cdeps + pushd build-cdeps + cmake ../ + make + popd From e9370280e0b6854bbfa5bc1e4216e5b02ed270e1 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 16:37:12 -0600 Subject: [PATCH 071/153] now build cdeps --- .github/workflows/extbuild.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index 89d76223a..e4b1557dd 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -98,6 +98,7 @@ jobs: - name: Build CDEPS run: | + export ESMFMKFILE=`find $HOME -name esmf.mk` git submodule init git submodule update mkdir build-cdeps From 06acde9b96db73f330b51c2c34b7b3fdae201c74 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 16:40:55 -0600 Subject: [PATCH 072/153] now build cdeps --- .github/workflows/extbuild.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index e4b1557dd..d222d19ad 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -98,7 +98,8 @@ jobs: - name: Build CDEPS run: | - export ESMFMKFILE=`find $HOME -name esmf.mk` + export ESMFMKFILE=$HOME/ESMF/lib/libg/Linux.gfortran.64.openmpi.default/esmf.mk + export PIO=$HOME/pio git submodule init git submodule update mkdir build-cdeps From 42bcb088032df1ef293f45af5e300574c17a2ba4 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 16:47:16 -0600 Subject: [PATCH 073/153] add build flags --- .github/workflows/extbuild.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index d222d19ad..d9c8758a0 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -104,6 +104,8 @@ jobs: git submodule update mkdir build-cdeps pushd build-cdeps + export FFLAGS="-g -ffree-form -Wall" + export CFLAGS="-g -Wall -std=gnu99" cmake ../ make popd From f172b169cfa2ea336bcb36fc694f806f0dcf70b1 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 16:51:14 -0600 Subject: [PATCH 074/153] add build flags --- .github/workflows/extbuild.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index d9c8758a0..eaeac00bc 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -104,8 +104,6 @@ jobs: git submodule update mkdir build-cdeps pushd build-cdeps - export FFLAGS="-g -ffree-form -Wall" - export CFLAGS="-g -Wall -std=gnu99" - cmake ../ + cmake -DCMAKE_BUILD_TYPE=DEBUG -DCMAKE_Fortran_FLAGS="-g -Wall -ffree-form" ../ make popd From 8de2f8d2681e0ab4141a83e41b84b6bdd38439e8 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 16:54:51 -0600 Subject: [PATCH 075/153] add build flags --- .github/workflows/extbuild.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index eaeac00bc..351e6131b 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -26,7 +26,7 @@ jobs: path: ~/ESMF key: ${{ runner.os }}-ESMF - id: load-env - run: sudo apt-get install gfortran wget openmpi-bin libopenmpi-dev netcdf-bin libnetcdf-dev + run: sudo apt-get install gfortran wget openmpi-bin netcdf-bin - id: build-ESMF if: steps.cache-esmf.outputs.cache-hit != 'true' @@ -67,6 +67,7 @@ jobs: - name: netcdf fortran build if: steps.cache-netcdf-fortran.outputs.cache-hit != 'true' run: | + sudo apt-get install libnetcdf-dev wget https://github.com/Unidata/netcdf-fortran/archive/v4.5.2.tar.gz tar -xzvf v4.5.2.tar.gz ls -l @@ -105,5 +106,5 @@ jobs: mkdir build-cdeps pushd build-cdeps cmake -DCMAKE_BUILD_TYPE=DEBUG -DCMAKE_Fortran_FLAGS="-g -Wall -ffree-form" ../ - make + make VERBOSE=1 popd From 73dec142772915c181a9e60aed8909a92a7e04ae Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 16:57:38 -0600 Subject: [PATCH 076/153] add build flags --- .github/workflows/extbuild.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index 351e6131b..8e52ae9eb 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -26,7 +26,7 @@ jobs: path: ~/ESMF key: ${{ runner.os }}-ESMF - id: load-env - run: sudo apt-get install gfortran wget openmpi-bin netcdf-bin + run: sudo apt-get install gfortran wget openmpi-bin netcdf-bin libopenmpi-dev - id: build-ESMF if: steps.cache-esmf.outputs.cache-hit != 'true' From f38484dee0f266affc46207039176389c22dbf29 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 17:01:25 -0600 Subject: [PATCH 077/153] add build flags --- .github/workflows/extbuild.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index 8e52ae9eb..821654ba1 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -105,6 +105,6 @@ jobs: git submodule update mkdir build-cdeps pushd build-cdeps - cmake -DCMAKE_BUILD_TYPE=DEBUG -DCMAKE_Fortran_FLAGS="-g -Wall -ffree-form" ../ + cmake -DCMAKE_BUILD_TYPE=DEBUG -DCMAKE_Fortran_FLAGS="-g -Wall -ffree-form -ffree-line-length-none" ../ make VERBOSE=1 popd From fbb0e1ea383035e13a34738d61b98b3766953e5b Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 7 Aug 2020 17:05:28 -0600 Subject: [PATCH 078/153] fix a real error --- docn/ocn_comp_nuopc.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docn/ocn_comp_nuopc.F90 b/docn/ocn_comp_nuopc.F90 index 8b7300ad1..074391dc3 100644 --- a/docn/ocn_comp_nuopc.F90 +++ b/docn/ocn_comp_nuopc.F90 @@ -521,7 +521,7 @@ subroutine docn_comp_run(importState, exportState, clock, target_ymd, target_tod if (ChkErr(rc,__LINE__,u_FILE_u)) return case('sst_aquap_analytic') call docn_datamode_aquaplanet_advance(exportstate, model_mesh, sst_option=aquap_option, rc=rc) - if (chkerr(rc,__line__,u_file_u)) return + if (ChkErr(rc,__LINE__,u_file_u)) return case('sst_aquap_constant') call docn_datamode_aquaplanet_advance(exportState, model_mesh, sst_constant_value=sst_constant_value, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return From 28c064443d1eca020177ebd3c855cd390a6c8370 Mon Sep 17 00:00:00 2001 From: Mariana Vertenstein Date: Sat, 8 Aug 2020 10:36:58 -0600 Subject: [PATCH 079/153] more bug fixes --- streams/dshr_methods_mod.F90 | 3 ++ streams/dshr_strdata_mod.F90 | 53 ++++++++++++++++++------------------ 2 files changed, 30 insertions(+), 26 deletions(-) diff --git a/streams/dshr_methods_mod.F90 b/streams/dshr_methods_mod.F90 index e3ecf8266..c5480ce9d 100644 --- a/streams/dshr_methods_mod.F90 +++ b/streams/dshr_methods_mod.F90 @@ -109,6 +109,9 @@ subroutine dshr_state_diagnose(State, flds_scalar_name, string, rc) ! no local data elseif (lrank == 1) then if (size(dataPtr1d) > 0) then + ! + call ESMF_LogWrite('DEBUG: '//trim(lfieldnamelist(n)), ESMF_LOGMSG_INFO) + ! write(msgString,'(A,3g14.7,i8)') trim(string)//': '//trim(lfieldnamelist(n)), & minval(dataPtr1d), maxval(dataPtr1d), sum(dataPtr1d), size(dataPtr1d) else diff --git a/streams/dshr_strdata_mod.F90 b/streams/dshr_strdata_mod.F90 index 6ad900583..e933f4cf7 100644 --- a/streams/dshr_strdata_mod.F90 +++ b/streams/dshr_strdata_mod.F90 @@ -1538,7 +1538,7 @@ subroutine shr_strdata_readstrm(sdat, per_stream, stream, fldbun_data, & if ( rcode /= PIO_NOERR ) then call shr_sys_abort(' ERROR: reading in variable: '// trim(per_stream%fldlist_stream(nf))) end if - if(handlefill) then + if (handlefill) then do n=1,size(dataptr1d) if(.not. shr_infnan_isnan(data_real1d(n)) .and. data_real1d(n) .ne. fillvalue_r4) then dataptr1d(n) = real(data_real1d(n), kind=r8) @@ -1568,6 +1568,8 @@ subroutine shr_strdata_readstrm(sdat, per_stream, stream, fldbun_data, & do l = 1,stream_nlev do n = 1,size(dataptr2d, dim=2) if (.not. shr_infnan_isnan(data_dbl2d(n,l)) .and. data_dbl2d(n,l) .ne. fillvalue_r8) then + dataptr2d(l,n) = data_dbl2d(n,l) + else dataptr2d(l,n) = r8fill endif enddo @@ -1580,6 +1582,7 @@ subroutine shr_strdata_readstrm(sdat, per_stream, stream, fldbun_data, & end do end if else ! stream_nlev == 1 + write(6,*)'DEBUG: dble data for ',trim(per_stream%fldlist_stream(nf)),' handlefill ',handlefill if (per_stream%stream_pio_iodesc_set) then call pio_read_darray(pioid, varid, per_stream%stream_pio_iodesc, data_dbl1d, rcode) else @@ -1589,13 +1592,17 @@ subroutine shr_strdata_readstrm(sdat, per_stream, stream, fldbun_data, & call shr_sys_abort(' ERROR: reading in variable: '// trim(per_stream%fldlist_stream(nf))) end if if (handlefill) then - do n=1,size(dataptr1d) - if(.not. shr_infnan_isnan(data_dbl1d(n)) .and. data_dbl1d(n) .ne. fillvalue_r8) then + do n = 1,size(dataptr1d) + if (.not. shr_infnan_isnan(data_dbl1d(n)) .and. data_dbl1d(n) .ne. fillvalue_r8) then dataptr1d(n) = data_dbl1d(n) else dataptr1d(n) = r8fill end if enddo + else + do n = 1,size(dataptr1d) + dataptr1d(n) = data_dbl1d(n) + end do endif end if @@ -1638,7 +1645,7 @@ subroutine shr_strdata_readstrm(sdat, per_stream, stream, fldbun_data, & if ( rcode /= PIO_NOERR ) then call shr_sys_abort(' ERROR: reading in variable: '// trim(per_stream%fldlist_stream(nf))) end if - if(handlefill) then + if (handlefill) then do n=1,lsize if(data_short1d(n).eq.fillvalue_i2) then dataptr1d(n) = r8fill @@ -1770,6 +1777,7 @@ subroutine shr_strdata_set_stream_iodesc(sdat, per_stream, fldname, pioid, rc) integer :: n, m, cnt type(var_desc_t) :: varid integer :: ndims + character(CS) :: dimname integer, allocatable :: dimids(:) integer, allocatable :: dimlens(:) integer :: unlimdid @@ -1777,7 +1785,6 @@ subroutine shr_strdata_set_stream_iodesc(sdat, per_stream, fldname, pioid, rc) integer :: lsize integer, pointer :: compdof(:) => null() integer, pointer :: compdof3d(:) => null() - character(CS) :: dimname integer :: rCode ! pio return code (only used when pio error handling is PIO_BCAST_ERROR) character(*), parameter :: subname = '(shr_strdata_set_stream_iodesc) ' character(*), parameter :: F00 = "('(shr_strdata_set_stream_iodesc) ',a,i8,2x,i8,2x,a)" @@ -1787,13 +1794,15 @@ subroutine shr_strdata_set_stream_iodesc(sdat, per_stream, fldname, pioid, rc) rc = ESMF_SUCCESS - ! query the first field in the stream dataset + ! set the number of vertical levels to a local variable + stream_nlev = per_stream%stream_nlev + + ! query the variable fldname in the stream dataset for its dimensions rcode = pio_inq_varid(pioid, trim(fldname), varid) rcode = pio_inq_varndims(pioid, varid, ndims) allocate(dimids(ndims)) allocate(dimlens(ndims)) - rcode = pio_inq_vardimid(pioid, varid, dimids(1:ndims)) do n = 1, ndims rcode = pio_inq_dimlen(pioid, dimids(n), dimlens(n)) @@ -1807,12 +1816,20 @@ subroutine shr_strdata_set_stream_iodesc(sdat, per_stream, fldname, pioid, rc) allocate(compdof(lsize)) call ESMF_DistGridGet(distGrid, localDe=0, seqIndexList=compdof, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return + if (stream_nlev > 1) then + allocate(compdof3d(stream_nlev*lsize)) + cnt = 0 + do n = 1,stream_nlev + do m = 1,size(compdof) + cnt = cnt + 1 + compdof3d(cnt) = (compdof(m)-1)*stream_nlev + n + enddo + enddo + end if ! determine type of the variable rcode = pio_inq_vartype(pioid, varid, pio_iovartype) - stream_nlev = per_stream%stream_nlev - if (ndims == 2) then if (sdat%masterproc) then write(sdat%logunit,F00) 'setting iodesc for : '//trim(fldname)// & @@ -1828,14 +1845,6 @@ subroutine shr_strdata_set_stream_iodesc(sdat, per_stream, fldname, pioid, rc) write(sdat%logunit,F01) 'setting iodesc for : '//trim(fldname)// & ' with dimlens(1), dimlens(2), dimlens(3) = ',dimlens(1),dimlens(2), dimlens(3), & ' variable had no time dimension '//trim(dimname) - allocate(compdof3d(lsize*stream_nlev)) - cnt = 0 - do m = 1,size(compdof) - do n = 1,stream_nlev - cnt = cnt + 1 - compdof3d(cnt) = (compdof(m)-1)*stream_nlev + n - enddo - enddo call pio_initdecomp(sdat%pio_subsystem, pio_iovartype, (/dimlens(1),dimlens(2),dimlens(3)/), compdof3d, & per_stream%stream_pio_iodesc) else if (trim(dimname) == 'time' .or. trim(dimname) == 'nt') then @@ -1855,16 +1864,8 @@ subroutine shr_strdata_set_stream_iodesc(sdat, per_stream, fldname, pioid, rc) write(sdat%logunit,F02) 'setting iodesc for : '//trim(fldname)// & ' with dimlens(1), dimlens(2),dimlens(3) = ',dimlens(1),dimlens(2),dimlens(3),& ' variable had time dimension ' - allocate(compdof3d(lsize*stream_nlev)) - cnt = 0 - do m = 1,size(compdof) - do n = 1,stream_nlev - cnt = cnt + 1 - compdof3d(cnt) = (compdof(m)-1)*stream_nlev + n - enddo - enddo end if - call pio_initdecomp(sdat%pio_subsystem, pio_iovartype, (/dimlens(1),dimlens(2),dimlens(3)/), compdof, & + call pio_initdecomp(sdat%pio_subsystem, pio_iovartype, (/dimlens(1),dimlens(2),dimlens(3)/), compdof3d, & per_stream%stream_pio_iodesc) else write(6,*)'ERROR: dimlens= ',dimlens From bfa92e3f742d30189e17516398ccb7fe745e33e4 Mon Sep 17 00:00:00 2001 From: Mariana Vertenstein Date: Sat, 8 Aug 2020 15:14:31 -0600 Subject: [PATCH 080/153] more bug fixes --- dice/cime_config/namelist_definition_dice.xml | 2 +- streams/dshr_strdata_mod.F90 | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/dice/cime_config/namelist_definition_dice.xml b/dice/cime_config/namelist_definition_dice.xml index 86e4b24d2..9401e295c 100644 --- a/dice/cime_config/namelist_definition_dice.xml +++ b/dice/cime_config/namelist_definition_dice.xml @@ -76,7 +76,7 @@ $DIN_LOC_ROOT/ice/dice7/SSMI/ssmi.ifrac.0.5x0.5_ESMFmesh_120520.nc - + $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5_ESMFmesh_120520.nc diff --git a/streams/dshr_strdata_mod.F90 b/streams/dshr_strdata_mod.F90 index 21441bf0a..a250f7143 100644 --- a/streams/dshr_strdata_mod.F90 +++ b/streams/dshr_strdata_mod.F90 @@ -396,7 +396,7 @@ subroutine shr_strdata_init(sdat, model_clock, rc) call shr_sys_abort(subName//"ERROR: file does not exist: "//trim(fileName)) end if endif - if(filename /= 'none') then + if (filename /= 'none') then sdat%pstrm(ns)%stream_mesh = ESMF_MeshCreate(trim(filename), fileformat=ESMF_FILEFORMAT_ESMFMESH, rc=rc) endif if (ChkErr(rc,__LINE__,u_FILE_u)) return @@ -1363,19 +1363,23 @@ subroutine shr_strdata_readstrm(sdat, ns, stream, stream_mesh, & call shr_sys_abort(subName//"ERROR: only double, real and short types are supported for stream read") end if - if(associated(dataptr2d_src) .and. trim(fldlist_model(nf)) .eq. uname) then + if (associated(dataptr2d_src) .and. trim(fldlist_model(nf)) .eq. uname) then ! save in dataptr2d_src dataptr2d_src(1,:) = dataptr(:) - elseif(associated(dataptr2d_src) .and. trim(fldlist_model(nf)) .eq. vname) then + else if (associated(dataptr2d_src) .and. trim(fldlist_model(nf)) .eq. vname) then + ! save in dataptr2d_src dataptr2d_src(2,:) = dataptr(:) else if (pio_iodesc_set) then + ! regrid the data call dshr_fldbun_getfieldN(fldbun_model, nf, field_dst, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return - call ESMF_FieldRegrid(sdat%pstrm(ns)%field_stream, field_dst, routehandle=sdat%pstrm(ns)%routehandle, & termorderflag=ESMF_TERMORDER_SRCSEQ, checkflag=.false., zeroregion=ESMF_REGION_TOTAL, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return else + ! fill the data + call dshr_fldbun_getfieldN(fldbun_model, nf, field_dst, rc=rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return call ESMF_FieldFill(field_dst, dataFillScheme="const", const1=dataptr(1), rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return endif From d7b8a4c8e1b7cbff88da5bdb782ab715de62468a Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Sat, 8 Aug 2020 16:34:53 -0600 Subject: [PATCH 081/153] remove unused variables --- share/glc_elevclass_mod.F90 | 1 - share/shr_assert_mod.F90.in | 3 +- share/shr_cal_mod.F90 | 12 +++--- share/shr_mpi_mod.F90 | 4 +- share/shr_sys_mod.F90 | 4 +- streams/dshr_methods_mod.F90 | 4 +- streams/dshr_strdata_mod.F90 | 76 +++--------------------------------- streams/dshr_stream_mod.F90 | 4 +- streams/dshr_tinterp_mod.F90 | 6 +-- 9 files changed, 24 insertions(+), 90 deletions(-) diff --git a/share/glc_elevclass_mod.F90 b/share/glc_elevclass_mod.F90 index 3a984f642..b44fbb91d 100644 --- a/share/glc_elevclass_mod.F90 +++ b/share/glc_elevclass_mod.F90 @@ -165,7 +165,6 @@ function glc_get_num_elevation_classes() result(num_elevation_classes) ! ! !ARGUMENTS: integer :: num_elevation_classes ! function result - integer :: rc ! ! !LOCAL VARIABLES: diff --git a/share/shr_assert_mod.F90.in b/share/shr_assert_mod.F90.in index fc62d64ba..978a3c5a9 100644 --- a/share/shr_assert_mod.F90.in +++ b/share/shr_assert_mod.F90.in @@ -80,7 +80,8 @@ subroutine shr_assert(var, msg, file, line) integer , intent(in), optional :: line character(len=:), allocatable :: full_msg - + + full_msg = '' if (.not. var) then full_msg = 'ERROR' if (present(file)) then diff --git a/share/shr_cal_mod.F90 b/share/shr_cal_mod.F90 index ada1c396f..086fbec53 100644 --- a/share/shr_cal_mod.F90 +++ b/share/shr_cal_mod.F90 @@ -523,8 +523,8 @@ subroutine shr_cal_date2ymd_long (date,year,month,day) tdate = abs(date) year =int( tdate /10000) if (date < 0) year = -year - month=int( mod(tdate,10000_SHR_KIND_I8)/ 100) - day = mod(tdate, 100_SHR_KIND_I8) + month=int( mod(tdate,10000_SHR_KIND_I8)/100, SHR_KIND_IN) + day =int( mod(tdate, 100_SHR_KIND_I8), SHR_KIND_IN) if (debug > 1) write(s_logunit,*) trim(subname),'_b ',year,month,day @@ -798,8 +798,8 @@ subroutine shr_cal_advDate_int(delta,units,dateIN,secIN,dateOUT,secOUT,calendar) i8dsec = i8dsec - i8dday*spd ! convert to i4 - idday = i8dday - idsec = i8dsec + idday = int(i8dday, SHR_KIND_I4) + idsec = int(i8dsec, SHR_KIND_I4) calkind = ESMF_CALKIND_NOLEAP lcalendar = shr_cal_calendarName(calendar) @@ -885,8 +885,8 @@ subroutine shr_cal_advDate_long(delta,units,dateIN,secIN,dateOUT,secOUT,calendar i8dsec = i8dsec - i8dday*spd ! convert to i4 - idday = i8dday - idsec = i8dsec + idday = int(i8dday, SHR_KIND_I4) + idsec = int(i8dsec, SHR_KIND_I4) calkind = ESMF_CALKIND_NOLEAP lcalendar = shr_cal_calendarName(calendar) diff --git a/share/shr_mpi_mod.F90 b/share/shr_mpi_mod.F90 index ab872a270..a5c29f8b4 100644 --- a/share/shr_mpi_mod.F90 +++ b/share/shr_mpi_mod.F90 @@ -91,8 +91,8 @@ Module shr_mpi_mod shr_mpi_maxr0, & shr_mpi_maxr1 end interface shr_mpi_max - -#include ! mpi library include file +! mpi library include file +#include !=============================================================================== CONTAINS diff --git a/share/shr_sys_mod.F90 b/share/shr_sys_mod.F90 index b89df7488..c7b40fdc7 100644 --- a/share/shr_sys_mod.F90 +++ b/share/shr_sys_mod.F90 @@ -92,7 +92,7 @@ SUBROUTINE shr_sys_system(str,rcode) #else - write(s_logunit,F00) 'ERROR: no implementation of system call for this architecture' + write(s_logunit,F00) 'ERROR: no implementation of system call for this architecture'//trim(str) call shr_sys_abort(subName//'no implementation of system call for this architecture') #endif #endif @@ -123,7 +123,7 @@ SUBROUTINE shr_sys_chdir(path, rcode) !------------------------------------------------------------------------------- ! PURPOSE: an architecture independent system call !------------------------------------------------------------------------------- - + rcode = 0 lenpath=len_trim(path) #if (defined AIX) diff --git a/streams/dshr_methods_mod.F90 b/streams/dshr_methods_mod.F90 index 1483e66d1..e5dba130c 100644 --- a/streams/dshr_methods_mod.F90 +++ b/streams/dshr_methods_mod.F90 @@ -89,7 +89,7 @@ subroutine dshr_state_diagnose(State, flds_scalar_name, string, rc) integer , intent(out) :: rc ! local variables - integer :: i,j,n + integer :: n type(ESMf_Field) :: lfield integer :: fieldCount, lrank character(ESMF_MAXSTR) ,pointer :: lfieldnamelist(:) @@ -427,7 +427,7 @@ subroutine dshr_fldbun_diagnose(FB, string, rc) integer , intent(out) :: rc ! local variables - integer :: i,j,n + integer :: j,n integer :: fieldCount, lrank character(ESMF_MAXSTR), pointer :: lfieldnamelist(:) character(len=CL) :: lstring diff --git a/streams/dshr_strdata_mod.F90 b/streams/dshr_strdata_mod.F90 index 39bc15b18..c1b86cde2 100644 --- a/streams/dshr_strdata_mod.F90 +++ b/streams/dshr_strdata_mod.F90 @@ -163,9 +163,7 @@ subroutine shr_strdata_init_from_xml(sdat, xmlfilename, model_mesh, clock, compn ! local variables type(ESMF_VM) :: vm - integer :: i integer :: localPet - integer :: ierr character(len=*), parameter :: subname='(shr_strdata_init_from_xml)' ! ---------------------------------------------- @@ -270,17 +268,13 @@ subroutine shr_strdata_init_model_domain( sdat, rc) integer , intent(out) :: rc ! local variables - integer :: n,k ! generic counters + integer :: n ! generic counters type(ESMF_DistGrid) :: distGrid - integer :: dimCount integer :: tileCount integer, allocatable :: elementCountPTile(:) - integer, allocatable :: indexCountPDE(:,:) integer :: spatialDim ! number of dimension in mesh integer :: numOwnedElements ! local size of mesh real(r8), allocatable :: ownedElemCoords(:) ! mesh lat and lons - integer :: my_task - integer :: ierr integer :: rcode ! ---------------------------------------------- @@ -336,33 +330,15 @@ subroutine shr_strdata_init(sdat, model_clock, rc) ! local variables type(ESMF_Calendar) :: esmf_calendar ! esmf calendar type(ESMF_CalKind_Flag) :: esmf_caltype ! esmf calendar type - type(ESMF_DistGrid) :: distgrid - type(ESMF_RegridMethod_Flag) :: regridmethod - type(ESMF_PoleMethod_Flag) :: polemethod character(CS) :: calendar ! calendar name - integer :: dimcount - integer, allocatable :: minIndexPTile(:,:) - integer, allocatable :: maxIndexPTile(:,:) - integer :: lnx, lny ! global mesh dimensions - integer :: ne ! number of local mesh elements integer :: ns ! stream index - integer :: n,m,k ! generic index + integer :: m ! generic index character(CL) :: fileName ! generic file name - integer :: nfiles ! number of data files for a given stream - character(CS) :: uname ! u vector field name - character(CS) :: vname ! v vector field name - integer :: nu, nv ! vector indices - integer :: nstream ! loop stream index - integer :: nvector ! loop vector index integer :: nfld ! loop stream field index - integer :: nflds ! total number of fields in a given stream + type(ESMF_Field) :: lfield ! temporary type(ESMF_Field) :: lfield_dst ! temporary integer :: srcTermProcessing_Value = 0 ! should this be a module variable? - integer , pointer :: stream_gindex(:) - integer :: stream_lsize - character(CS) :: tmpstr - integer :: ierr integer :: localpet logical :: fileExists type(ESMF_VM) :: vm @@ -372,7 +348,6 @@ subroutine shr_strdata_init(sdat, model_clock, rc) character(len=*), parameter :: subname='(shr_strdata_mod:shr_sdat_init)' character(*) , parameter :: F00 = "('(shr_sdat_init) ',a)" character(*) , parameter :: F01 = "('(shr_sdat) ',a,2x,i8)" - character(ESMF_MAXSTR) ,pointer :: lfieldnamelist(:) ! ---------------------------------------------- rc = ESMF_SUCCESS @@ -657,11 +632,8 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) ! local variables integer :: ns !stream index integer :: nf ! field index - integer :: m ! vector index integer :: n,i ! generic indices - integer :: ierr - integer :: nu,nv - integer :: lsize + integer :: nu logical , allocatable :: newData(:) integer , allocatable :: ymdmod(:) ! modified model dates to handle Feb 29 real(r8), allocatable :: coszen(:) ! cosine of zenith angle @@ -685,19 +657,7 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) integer :: dday ! delta days real(r8) :: dtime ! delta time integer :: year,month,day ! date year month day - integer :: spatialDim ! spatial dimension of mesh integer :: numOwnedElements ! local size of mesh - character(CS) :: uname ! u vector field name - character(CS) :: vname ! v vector field name - type(ESMF_Field) :: field_src - type(ESMF_Field) :: field_dst - real(r8) :: lon, lat - real(r8) :: sinlon, sinlat - real(r8) :: coslon, coslat - real(r8) :: ux, uy - logical :: checkflag = .false. - integer :: npes - integer :: my_task integer :: nstreams real(r8) ,parameter :: solZenMin = 0.001_r8 ! minimum solar zenith angle integer ,parameter :: tadj = 2 @@ -1034,13 +994,8 @@ subroutine shr_strdata_readLBUB(sdat, ns, mDate, mSec, newData, istr, rc) ! local variables type(shr_stream_streamType), pointer :: stream type(ESMF_Mesh) , pointer :: stream_mesh - type(ESMF_FieldBundle) , pointer :: fldbun_stream_lb - type(ESMF_FieldBundle) , pointer :: fldbun_stream_ub type(ESMF_VM) :: vm - integer :: nf - integer :: rCode ! return code logical :: fileexists - integer :: ivals(6) ! bcast buffer integer :: oDateLB,oSecLB,dDateLB integer :: oDateUB,oSecUB,dDateUB real(r8) :: rDateM,rDateLB,rDateUB ! model,LB,UB dates with fractional days @@ -1291,7 +1246,7 @@ subroutine shr_strdata_readstrm(sdat, ns, stream, stream_mesh, & call PIO_seterrorhandling(pioid, old_error_handle) if (debug>0 .and. sdat%masterproc) then - write(sdat%logunit,F02)' reading '//trim(fldlist_stream(nf))//' into '//trim(fldlist_model(nf)),& + Write(sdat%logunit,F02)' reading '//trim(fldlist_stream(nf))//' into '//trim(fldlist_model(nf)),& ' at time index: ',nt end if @@ -1462,7 +1417,6 @@ subroutine shr_strdata_set_stream_iodesc(sdat, & integer :: ndims integer, allocatable :: dimids(:) integer, allocatable :: dimlens(:) - integer :: unlimdid type(ESMF_DistGrid) :: distGrid integer :: lsize integer, pointer :: compdof(:) => null() @@ -1473,8 +1427,6 @@ subroutine shr_strdata_set_stream_iodesc(sdat, & character(*), parameter :: F01 = "('(shr_strdata_set_stream_iodesc) ',a,i8,2x,i8,2x,a)" character(*), parameter :: F02 = "('(shr_strdata_set_stream_iodesc) ',a,i8,2x,i8,2x,i8,2x,a)" !------------------------------------------------------------------------------- - integer :: old_error_handle - rc = ESMF_SUCCESS ! call pio_seterrorhandling(pioid, PIO_BCAST_ERROR, old_error_handle) @@ -1581,22 +1533,4 @@ subroutine shr_strdata_get_stream_pointer(sdat, strm_fld, strm_ptr, rc) end subroutine shr_strdata_get_stream_pointer - !=============================================================================== - subroutine shr_strdata_handle_error(ierr, errorstr) - use pio, only: pio_noerr - - ! input/output variables - integer, intent(in) :: ierr - character(len=*), intent(in) :: errorstr - - ! local variables - character(len=256) :: errormsg - !------------------------------------------------------------------------------- - - if (ierr /= PIO_NOERR) then - write(errormsg, '(a,i6,2a)') '(PIO:', ierr, ') ', trim(errorstr) - call shr_sys_abort(errormsg) - end if - end subroutine shr_strdata_handle_error - end module dshr_strdata_mod diff --git a/streams/dshr_stream_mod.F90 b/streams/dshr_stream_mod.F90 index 776c14343..249fe7aa5 100644 --- a/streams/dshr_stream_mod.F90 +++ b/streams/dshr_stream_mod.F90 @@ -1169,7 +1169,7 @@ subroutine shr_stream_getCalendar(strm, k, calendar) character(*) ,intent(out) :: calendar ! calendar name ! local - integer :: fid, vid, n + integer :: vid, n character(CL) :: fileName,lcal integer :: old_handle integer :: rCode @@ -1367,7 +1367,7 @@ subroutine shr_stream_restIO(pioid, streams, mode) type(var_desc_t) :: varid, tvarid, dvarid, ntvarid, hdvarid integer :: rcode integer :: dimid_stream, dimid_files,dimid_nt, dimid_str - integer :: nt, n, k, maxnfiles=0 + integer :: n, k, maxnfiles=0 integer :: maxnt = 0 integer, allocatable :: tmp(:) character(len=CL) :: fname diff --git a/streams/dshr_tinterp_mod.F90 b/streams/dshr_tinterp_mod.F90 index f48fa8d3f..8379cd824 100644 --- a/streams/dshr_tinterp_mod.F90 +++ b/streams/dshr_tinterp_mod.F90 @@ -5,7 +5,7 @@ module dshr_tInterp_mod !--------------------------------------------------------------- use ESMF - use shr_kind_mod , only : i8=>shr_kind_i8, r8=>shr_kind_r8, cs=>shr_kind_cs, cl=>shr_kind_cl + use shr_kind_mod , only : i8=>shr_kind_i8, r8=>shr_kind_r8, cs=>shr_kind_cs, cl=>shr_kind_cl, shr_kind_in use shr_sys_mod , only : shr_sys_abort use shr_cal_mod , only : shr_cal_timeSet, shr_cal_advDateInt, shr_cal_date2julian use shr_orb_mod , only : shr_orb_cosz, shr_orb_decl, SHR_ORB_UNDEF_REAL @@ -222,7 +222,7 @@ subroutine shr_tInterp_getAvgCosz(tavCosz, lon, lat, & ldt8 = modeldt if (mod(dtsec,ldt8) /= 0) then ldt8 = (dtsec)/((dtsec)/ldt8+1) - ldt = ldt8 + ldt = int(ldt8, shr_kind_in) endif ! compute time average @@ -250,7 +250,7 @@ subroutine shr_tInterp_getAvgCosz(tavCosz, lon, lat, & timeint = reday2-reday0 call ESMF_TimeIntervalGet(timeint, s_i8=dtsec, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - ldt = dtsec + ldt = int(dtsec, shr_kind_in) endif !--- get next cosz value for t-avg --- From 5a1b06005c3c0af9a61b5cb749f31f2dbdf67d36 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Sat, 8 Aug 2020 16:55:28 -0600 Subject: [PATCH 082/153] more cleanup --- dshr/dshr_dfield_mod.F90 | 12 +++++------- dshr/dshr_fldlist_mod.F90 | 2 -- dshr/dshr_mod.F90 | 5 ++--- streams/dshr_methods_mod.F90 | 2 +- streams/dshr_strdata_mod.F90 | 5 +---- 5 files changed, 9 insertions(+), 17 deletions(-) diff --git a/dshr/dshr_dfield_mod.F90 b/dshr/dshr_dfield_mod.F90 index 6abcc1c36..54bf02147 100644 --- a/dshr/dshr_dfield_mod.F90 +++ b/dshr/dshr_dfield_mod.F90 @@ -65,7 +65,6 @@ subroutine dshr_dfield_add_1d(dfields, sdat, state_fld, strm_fld, state, logunit integer :: status character(cl) :: msgstr integer :: fieldcount - type(ESMF_Field) :: lfield type(ESMF_FieldBundle) :: fldbun_model character(ESMF_MAXSTR) ,pointer :: lfieldnamelist(:) logical :: found @@ -143,7 +142,6 @@ subroutine dshr_dfield_add_1d_stateptr(dfields, sdat, state_fld, strm_fld, state integer :: status character(cl) :: msgstr integer :: fieldcount - type(ESMF_Field) :: lfield type(ESMF_FieldBundle) :: fldbun_model character(ESMF_MAXSTR) ,pointer :: lfieldnamelist(:) logical :: found @@ -230,8 +228,8 @@ subroutine dshr_dfield_add_2d(dfields, sdat, state_fld, strm_flds, state, & ! local variables type(dfield_type), pointer :: dfield_new type(ESMF_FieldBundle) :: fldbun_model - integer :: n, i, ns, nf - integer :: nflds, lsize, num + integer :: n, ns, nf + integer :: nflds integer :: status character(cl) :: msgstr integer :: fieldcount @@ -334,8 +332,8 @@ subroutine dshr_dfield_add_2d_stateptr(dfields, sdat, state_fld, strm_flds, stat ! local variables type(dfield_type), pointer :: dfield_new type(ESMF_FieldBundle) :: fldbun_model - integer :: n, i, ns, nf - integer :: nflds, lsize, num + integer :: n, ns, nf + integer :: nflds integer :: status character(cl) :: msgstr integer :: fieldcount @@ -438,7 +436,7 @@ subroutine dshr_dfield_copy(dfields, sdat, rc) type(ESMF_field) :: lfield type(dfield_type), pointer :: dfield real(r8), pointer :: data1d(:) - integer :: n, nf + integer :: nf integer :: fldbun_index integer :: stream_index !------------------------------------------------------------------------------- diff --git a/dshr/dshr_fldlist_mod.F90 b/dshr/dshr_fldlist_mod.F90 index a20f6cf6c..0edab9cee 100644 --- a/dshr/dshr_fldlist_mod.F90 +++ b/dshr/dshr_fldlist_mod.F90 @@ -34,7 +34,6 @@ subroutine dshr_fldlist_add(fldlists, fldname, ungridded_lbound, ungridded_uboun integer, optional , intent(in) :: ungridded_ubound ! local variables type(fldlist_type), pointer :: fldlist_new - integer :: rc ! ---------------------------------------------- allocate(fldlist_new) @@ -62,7 +61,6 @@ subroutine dshr_fldlist_realize(state, fldLists, flds_scalar_name, flds_scalar_n integer , intent(inout) :: rc ! local variables - integer :: n type(fldlist_type), pointer :: fldList type(ESMF_Field) :: field character(len=CS) :: stdname diff --git a/dshr/dshr_mod.F90 b/dshr/dshr_mod.F90 index f28649773..6b807f76e 100644 --- a/dshr/dshr_mod.F90 +++ b/dshr/dshr_mod.F90 @@ -1262,7 +1262,6 @@ subroutine dshr_restart_write(rpfile, case_name, model_name, inst_suffix, ymd, t type(var_desc_t) :: varid type(io_desc_t) :: pio_iodesc integer :: rcode - integer :: yy, mm, dd character(*), parameter :: F00 = "('(dshr_restart_write) ',2a,2(i0,2x))" !------------------------------------------------------------------------------- @@ -1344,7 +1343,7 @@ subroutine dshr_state_getscalar(state, scalar_id, scalar_value, flds_scalar_name integer, intent(inout) :: rc ! local variables - integer :: mytask, ierr, len + integer :: mytask type(ESMF_VM) :: vm type(ESMF_Field) :: field real(r8), pointer :: farrayptr(:,:) @@ -1571,6 +1570,7 @@ subroutine dshr_orbital_update(clock, logunit, mastertask, eccen, obliqr, lambm if ( eccen == SHR_ORB_UNDEF_REAL .or. obliqr == SHR_ORB_UNDEF_REAL .or. & mvelpp == SHR_ORB_UNDEF_REAL .or. lambm0 == SHR_ORB_UNDEF_REAL) then write (msgstr, *) subname//' ERROR: orb params incorrect' + write (logunit, *) msgstr call ESMF_LogSetError(ESMF_RC_NOT_VALID, msg=msgstr, line=__LINE__, file=__FILE__, rcToReturn=rc) return ! bail out endif @@ -1595,7 +1595,6 @@ real(R8) function getNextRadCDay_i8( ymd, tod, stepno, dtime, iradsw, calendar ) real(R8) :: nextsw_cday real(R8) :: julday integer :: liradsw - integer :: yy,mm,dd character(*),parameter :: subName = '(getNextRadCDay) ' !------------------------------------------------------------------------------- diff --git a/streams/dshr_methods_mod.F90 b/streams/dshr_methods_mod.F90 index e5dba130c..1dc144242 100644 --- a/streams/dshr_methods_mod.F90 +++ b/streams/dshr_methods_mod.F90 @@ -427,7 +427,7 @@ subroutine dshr_fldbun_diagnose(FB, string, rc) integer , intent(out) :: rc ! local variables - integer :: j,n + integer :: n integer :: fieldCount, lrank character(ESMF_MAXSTR), pointer :: lfieldnamelist(:) character(len=CL) :: lstring diff --git a/streams/dshr_strdata_mod.F90 b/streams/dshr_strdata_mod.F90 index c1b86cde2..c7c55bd50 100644 --- a/streams/dshr_strdata_mod.F90 +++ b/streams/dshr_strdata_mod.F90 @@ -275,7 +275,6 @@ subroutine shr_strdata_init_model_domain( sdat, rc) integer :: spatialDim ! number of dimension in mesh integer :: numOwnedElements ! local size of mesh real(r8), allocatable :: ownedElemCoords(:) ! mesh lat and lons - integer :: rcode ! ---------------------------------------------- rc = ESMF_SUCCESS @@ -632,8 +631,7 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) ! local variables integer :: ns !stream index integer :: nf ! field index - integer :: n,i ! generic indices - integer :: nu + integer :: i ! generic indices logical , allocatable :: newData(:) integer , allocatable :: ymdmod(:) ! modified model dates to handle Feb 29 real(r8), allocatable :: coszen(:) ! cosine of zenith angle @@ -657,7 +655,6 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) integer :: dday ! delta days real(r8) :: dtime ! delta time integer :: year,month,day ! date year month day - integer :: numOwnedElements ! local size of mesh integer :: nstreams real(r8) ,parameter :: solZenMin = 0.001_r8 ! minimum solar zenith angle integer ,parameter :: tadj = 2 From b1b2697af09d4662a5685c9a1bd85f6dd437c650 Mon Sep 17 00:00:00 2001 From: Mariana Vertenstein Date: Sun, 9 Aug 2020 21:35:49 -0600 Subject: [PATCH 083/153] changes to get 3d stream input working --- streams/dshr_methods_mod.F90 | 6 +++--- streams/dshr_strdata_mod.F90 | 17 +++++++++++------ 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/streams/dshr_methods_mod.F90 b/streams/dshr_methods_mod.F90 index 3baa6cd6d..15d8e99cb 100644 --- a/streams/dshr_methods_mod.F90 +++ b/streams/dshr_methods_mod.F90 @@ -41,12 +41,12 @@ subroutine dshr_state_getfldptr(State, fldname, fldptr1, fldptr2, allowNullRetur character(len=*) , intent(in) :: fldname real(R8) , pointer, intent(inout), optional :: fldptr1(:) real(R8) , pointer, intent(inout), optional :: fldptr2(:,:) - logical , intent(in),optional :: allowNullReturn + logical , intent(in),optional :: allowNullReturn integer , intent(out) :: rc ! local variables type(ESMF_Field) :: lfield - integer :: itemCount + integer :: itemCount character(len=*), parameter :: subname='(dshr_state_getfldptr)' ! ---------------------------------------------- @@ -72,7 +72,7 @@ subroutine dshr_state_getfldptr(State, fldname, fldptr1, fldptr2, allowNullRetur if (chkerr(rc,__LINE__,u_FILE_u)) return call dshr_field_getfldptr(lfield, fldptr1=fldptr1, fldptr2=fldptr2, rc=rc) - if (chkerr(rc,__LINE__,u_FILE_u)) return + if (chkerr(rc,__LINE__,u_FILE_u)) return end if end subroutine dshr_state_getfldptr diff --git a/streams/dshr_strdata_mod.F90 b/streams/dshr_strdata_mod.F90 index c52e53261..26b7bebf6 100644 --- a/streams/dshr_strdata_mod.F90 +++ b/streams/dshr_strdata_mod.F90 @@ -1582,7 +1582,6 @@ subroutine shr_strdata_readstrm(sdat, per_stream, stream, fldbun_data, & end do end if else ! stream_nlev == 1 - write(6,*)'DEBUG: dble data for ',trim(per_stream%fldlist_stream(nf)),' handlefill ',handlefill if (per_stream%stream_pio_iodesc_set) then call pio_read_darray(pioid, varid, per_stream%stream_pio_iodesc, data_dbl1d, rcode) else @@ -1774,6 +1773,7 @@ subroutine shr_strdata_set_stream_iodesc(sdat, per_stream, fldname, pioid, rc) ! local variables integer :: stream_nlev + integer :: gsize2d integer :: pio_iovartype integer :: n, m, cnt type(var_desc_t) :: varid @@ -1802,6 +1802,7 @@ subroutine shr_strdata_set_stream_iodesc(sdat, per_stream, fldname, pioid, rc) rcode = pio_inq_varid(pioid, trim(fldname), varid) rcode = pio_inq_varndims(pioid, varid, ndims) + ! allocate memory for dimids and dimlens allocate(dimids(ndims)) allocate(dimlens(ndims)) rcode = pio_inq_vardimid(pioid, varid, dimids(1:ndims)) @@ -1819,11 +1820,13 @@ subroutine shr_strdata_set_stream_iodesc(sdat, per_stream, fldname, pioid, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return if (stream_nlev > 1) then allocate(compdof3d(stream_nlev*lsize)) + ! Assume that first 2 dimensions correspond to the compdof + gsize2d = dimlens(1)*dimlens(2) cnt = 0 do n = 1,stream_nlev do m = 1,size(compdof) cnt = cnt + 1 - compdof3d(cnt) = (compdof(m)-1)*stream_nlev + n + compdof3d(cnt) = (n-1)*gsize2d + compdof(m) enddo enddo end if @@ -1831,11 +1834,12 @@ subroutine shr_strdata_set_stream_iodesc(sdat, per_stream, fldname, pioid, rc) ! determine type of the variable rcode = pio_inq_vartype(pioid, varid, pio_iovartype) + ! determine io descriptor if (ndims == 2) then if (sdat%masterproc) then write(sdat%logunit,F00) 'setting iodesc for : '//trim(fldname)// & ' with dimlens(1), dimlens2 = ',dimlens(1),dimlens(2),& - ' variable had no time dimension ' + ' variable has no time dimension ' end if call pio_initdecomp(sdat%pio_subsystem, pio_iovartype, (/dimlens(1),dimlens(2)/), compdof, & per_stream%stream_pio_iodesc) @@ -1845,14 +1849,14 @@ subroutine shr_strdata_set_stream_iodesc(sdat, per_stream, fldname, pioid, rc) if (stream_nlev > 1) then write(sdat%logunit,F01) 'setting iodesc for : '//trim(fldname)// & ' with dimlens(1), dimlens(2), dimlens(3) = ',dimlens(1),dimlens(2), dimlens(3), & - ' variable had no time dimension '//trim(dimname) + ' variable has no time dimension '//trim(dimname) call pio_initdecomp(sdat%pio_subsystem, pio_iovartype, (/dimlens(1),dimlens(2),dimlens(3)/), compdof3d, & per_stream%stream_pio_iodesc) else if (trim(dimname) == 'time' .or. trim(dimname) == 'nt') then if (sdat%masterproc) then write(sdat%logunit,F01) 'setting iodesc for : '//trim(fldname)// & ' with dimlens(1), dimlens(2) = ',dimlens(1),dimlens(2),& - ' variable had time dimension '//trim(dimname) + ' variable as time dimension '//trim(dimname) end if call pio_initdecomp(sdat%pio_subsystem, pio_iovartype, (/dimlens(1),dimlens(2)/), compdof, & per_stream%stream_pio_iodesc) @@ -1864,7 +1868,7 @@ subroutine shr_strdata_set_stream_iodesc(sdat, per_stream, fldname, pioid, rc) if (sdat%masterproc) then write(sdat%logunit,F02) 'setting iodesc for : '//trim(fldname)// & ' with dimlens(1), dimlens(2),dimlens(3) = ',dimlens(1),dimlens(2),dimlens(3),& - ' variable had time dimension ' + ' variable has time dimension ' end if call pio_initdecomp(sdat%pio_subsystem, pio_iovartype, (/dimlens(1),dimlens(2),dimlens(3)/), compdof3d, & per_stream%stream_pio_iodesc) @@ -1878,6 +1882,7 @@ subroutine shr_strdata_set_stream_iodesc(sdat, per_stream, fldname, pioid, rc) call shr_sys_abort(trim(subname)//' only ndims of 2 and 3 and 4 are currently supported') end if + ! deallocate memory deallocate(compdof) if (associated(compdof3d)) deallocate(compdof3d) deallocate(dimids) From 246644a071a7228167cf49c562f3c1f51ee93665 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Mon, 10 Aug 2020 07:12:01 -0600 Subject: [PATCH 084/153] clean up wav comp --- dwav/wav_comp_nuopc.F90 | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/dwav/wav_comp_nuopc.F90 b/dwav/wav_comp_nuopc.F90 index d48abb636..605d3cf16 100644 --- a/dwav/wav_comp_nuopc.F90 +++ b/dwav/wav_comp_nuopc.F90 @@ -75,7 +75,6 @@ module wav_comp_nuopc character(*) , parameter :: modName = "(wav_comp_nuopc)" ! linked lists - type(fldList_type) , pointer :: fldsImport => null() type(fldList_type) , pointer :: fldsExport => null() type(dfield_type) , pointer :: dfields => null() @@ -146,7 +145,6 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) ! local variables integer :: inst_index ! number of current instance (ie. 1) - character(len=CL) :: cvalue ! temporary integer :: nu ! unit number integer :: ierr ! error code logical :: exists @@ -256,7 +254,6 @@ subroutine InitializeRealize(gcomp, importState, exportState, clock, rc) integer :: current_mon ! model month integer :: current_day ! model day integer :: current_tod ! model sec into model date - character(CL) :: cvalue ! temporary character(len=*), parameter :: subname=trim(modName)//':(InitializeRealize) ' !------------------------------------------------------------------------------- @@ -293,7 +290,7 @@ subroutine InitializeRealize(gcomp, importState, exportState, clock, rc) call shr_cal_ymd2date(current_year, current_mon, current_day, current_ymd) ! Run dwav to create export state - call dwav_comp_run(mpicom, my_task, logunit, current_ymd, current_tod, sdat, rc=rc) + call dwav_comp_run(logunit, current_ymd, current_tod, sdat, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return ! Add scalars to export state @@ -345,7 +342,7 @@ subroutine ModelAdvance(gcomp, rc) call shr_cal_ymd2date(yr, mon, day, next_ymd) ! run dwav - call dwav_comp_run(mpicom, my_task, logunit, next_ymd, next_tod, sdat, rc=rc) + call dwav_comp_run(logunit, next_ymd, next_tod, sdat, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return ! write_restart if alarm is ringing @@ -437,7 +434,6 @@ subroutine dwav_comp_realize(importState, exportState, rc) integer , intent(out) :: rc ! local variables - character(CS), allocatable :: strm_flds(:) character(*), parameter :: subName = "(dwav_comp_realize) " ! ---------------------------------------------- @@ -467,15 +463,13 @@ subroutine dwav_comp_realize(importState, exportState, rc) end subroutine dwav_comp_realize !=============================================================================== - subroutine dwav_comp_run(mpicom, my_task, logunit, target_ymd, target_tod, sdat, rc) + subroutine dwav_comp_run(logunit, target_ymd, target_tod, sdat, rc) ! -------------------------- ! advance dwav ! -------------------------- ! input/output variables: - integer , intent(in) :: mpicom ! mpi communicator - integer , intent(in) :: my_task integer , intent(in) :: logunit integer , intent(in) :: target_ymd ! model date integer , intent(in) :: target_tod ! model sec into model date From 9d716f9978261d58ad71eb4f65316293b3f9c959 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Mon, 10 Aug 2020 07:28:04 -0600 Subject: [PATCH 085/153] more cleanup --- datm/atm_comp_nuopc.F90 | 10 ++-------- datm/datm_datamode_core2_mod.F90 | 10 ++-------- datm/datm_datamode_era5_mod.F90 | 12 ++---------- datm/datm_datamode_jra_mod.F90 | 2 -- dice/dice_datamode_ssmi_mod.F90 | 1 - dice/ice_comp_nuopc.F90 | 5 ----- dlnd/lnd_comp_nuopc.F90 | 2 -- docn/docn_datamode_aquaplanet_mod.F90 | 1 - docn/ocn_comp_nuopc.F90 | 7 ------- drof/rof_comp_nuopc.F90 | 4 ---- 10 files changed, 6 insertions(+), 48 deletions(-) diff --git a/datm/atm_comp_nuopc.F90 b/datm/atm_comp_nuopc.F90 index cbe3a4fcf..282db5a25 100644 --- a/datm/atm_comp_nuopc.F90 +++ b/datm/atm_comp_nuopc.F90 @@ -92,8 +92,6 @@ module atm_comp_nuopc logical :: flds_presaero = .false. ! true => send valid prescribe aero fields to mediator logical :: flds_co2 = .false. ! true => send prescribed co2 to mediator logical :: flds_wiso = .false. ! true => send water isotopes to mediator - character(CL) :: bias_correct = nullstr ! send bias correction fields to coupler (not used here) - character(CL) :: anomaly_forcing(8) = nullstr ! send anomaly forcing fields to coupler (not used here) character(CL) :: restfilm = nullstr ! model restart file namelist integer :: nx_global ! global nx integer :: ny_global ! global ny @@ -177,7 +175,6 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) integer, intent(out) :: rc ! local variables - character(len=CL) :: cvalue ! temporary integer :: nu ! unit number integer :: ierr ! error code logical :: exists ! check for file existence @@ -417,7 +414,6 @@ subroutine ModelAdvance(gcomp, rc) ! local variables type(ESMF_State) :: importState, exportState type(ESMF_Clock) :: clock - type(ESMF_Time) :: time type(ESMF_Alarm) :: alarm type(ESMF_Time) :: currTime type(ESMF_Time) :: nextTime @@ -432,7 +428,6 @@ subroutine ModelAdvance(gcomp, rc) real(R8) :: orbMvelpp ! orb moving vernal eq (radians) real(R8) :: orbLambm0 ! orb mean long of perhelion (radians) real(R8) :: orbObliqr ! orb obliquity (radians) - character(len=CL) :: cvalue ! temporary character(len=*),parameter :: subname=trim(modName)//':(ModelAdvance) ' !------------------------------------------------------------------------------- @@ -587,8 +582,8 @@ subroutine datm_comp_run(importState, exportState, target_ymd, target_tod, targe call ESMF_TraceRegionEnter('datm_datamode') select case (trim(datamode)) case('CORE2_NYF','CORE2_IAF') - call datm_datamode_core2_advance(exportstate, datamode, target_ymd, target_tod, target_mon, & - sdat%model_calendar, factorfn_mesh, factorfn_data, rc) + call datm_datamode_core2_advance(datamode, target_ymd, target_tod, target_mon, & + sdat%model_calendar, factorfn_mesh, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return case('CORE_IAF_JRA') call datm_datamode_jra_advance(exportstate, target_ymd, target_tod, sdat%model_calendar, rc) @@ -735,7 +730,6 @@ real(R8) function getNextRadCDay( ymd, tod, stepno, dtime, iradsw, calendar ) real(R8) :: nextsw_cday real(R8) :: julday integer :: liradsw - integer :: yy,mm,dd character(*),parameter :: subName = '(getNextRadCDay) ' !------------------------------------------------------------------------------- diff --git a/datm/datm_datamode_core2_mod.F90 b/datm/datm_datamode_core2_mod.F90 index cf2f97dec..98a231db8 100644 --- a/datm/datm_datamode_core2_mod.F90 +++ b/datm/datm_datamode_core2_mod.F90 @@ -43,7 +43,6 @@ module datm_datamode_core2_mod real(r8), pointer :: Faxa_swvdr(:) => null() real(r8), pointer :: Faxa_swvdf(:) => null() real(r8), pointer :: Faxa_swnet(:) => null() - real(r8), pointer :: Faxa_swdn(:) => null() ! stream data real(r8), pointer :: strm_prec(:) => null() @@ -249,18 +248,16 @@ subroutine datm_datamode_core2_init_pointers(exportState, sdat, datamode, factor end subroutine datm_datamode_core2_init_pointers !=============================================================================== - subroutine datm_datamode_core2_advance(exportstate, datamode, target_ymd, target_tod, target_mon, & - model_calendar, factorfn_mesh, factorfn_data, rc) + subroutine datm_datamode_core2_advance(datamode, target_ymd, target_tod, target_mon, & + model_calendar, factorfn_mesh, rc) ! input/output variables - type(ESMF_State) , intent(inout) :: exportState character(len=*) , intent(in) :: datamode integer , intent(in) :: target_ymd integer , intent(in) :: target_tod integer , intent(in) :: target_mon character(len=*) , intent(in) :: model_calendar character(len=*) , intent(in) :: factorfn_mesh - character(len=*) , intent(in) :: factorfn_data integer , intent(out) :: rc ! local variables @@ -426,9 +423,6 @@ subroutine datm_get_adjustment_factors(sdat, fileName_mesh, fileName_data, windF type(ESMF_Field) :: field_src type(ESMF_Field) :: field_dst integer :: lsize - integer :: gsize - integer :: n ! generic indicies - logical :: domap ! map or not integer, pointer :: gindex(:) ! domain decomposition of data integer :: ndims ! number of dims integer, allocatable :: dimid(:) diff --git a/datm/datm_datamode_era5_mod.F90 b/datm/datm_datamode_era5_mod.F90 index 977d9f5d2..9c7cd1d20 100644 --- a/datm/datm_datamode_era5_mod.F90 +++ b/datm/datm_datamode_era5_mod.F90 @@ -33,7 +33,6 @@ module datm_datamode_era5_mod real(r8), pointer :: Sa_shum(:) => null() real(r8), pointer :: Sa_dens(:) => null() real(r8), pointer :: Sa_pbot(:) => null() - real(r8), pointer :: Sa_pslv(:) => null() real(r8), pointer :: Faxa_lwdn(:) => null() real(r8), pointer :: Faxa_lwnet(:) => null() real(r8), pointer :: Faxa_rain(:) => null() @@ -55,7 +54,6 @@ module datm_datamode_era5_mod ! stream data real(r8), pointer :: strm_tdew(:) => null() - logical :: atm_prognostic = .false. real(r8) :: tbotmax ! units detector real(r8) :: tdewmax ! units detector @@ -136,7 +134,6 @@ subroutine datm_datamode_era5_init_pointers(exportState, sdat, rc) integer , intent(out) :: rc ! local variables - type(ESMF_StateItem_Flag) :: itemFlag character(len=*), parameter :: subname='(datm_init_pointers): ' !------------------------------------------------------------------------------- @@ -217,17 +214,12 @@ subroutine datm_datamode_era5_advance(exportstate, masterproc, logunit, mpicom, ! local variables logical :: first_time = .true. - integer :: n,kf ! indices + integer :: n ! indices integer :: lsize ! size of attr vect real(r8) :: rtmp - real(r8) :: swndr - real(r8) :: swndf - real(r8) :: swvdr - real(r8) :: swvdf - real(r8) :: ratio_rvrf real(r8) :: tbot, pbot real(r8) :: vp - real(r8) :: ea, e, qsat, frac + real(r8) :: e, qsat character(len=*), parameter :: subname='(datm_datamode_era5_advance): ' !------------------------------------------------------------------------------- diff --git a/datm/datm_datamode_jra_mod.F90 b/datm/datm_datamode_jra_mod.F90 index 4d313fee9..51a149c24 100644 --- a/datm/datm_datamode_jra_mod.F90 +++ b/datm/datm_datamode_jra_mod.F90 @@ -39,7 +39,6 @@ module datm_datamode_jra_mod real(r8), pointer :: Faxa_swvdr(:) => null() real(r8), pointer :: Faxa_swvdf(:) => null() real(r8), pointer :: Faxa_swnet(:) => null() - real(r8), pointer :: Faxa_swdn(:) => null() ! stream data real(r8), pointer :: strm_prec(:) => null() @@ -208,7 +207,6 @@ subroutine datm_datamode_jra_advance(exportstate, target_ymd, target_tod, model_ real(R8) :: avg_alb ! average albedo real(R8) :: rday ! elapsed day real(R8) :: cosFactor ! cosine factor - real(R8) :: factor ! generic/temporary correction factor character(len=*), parameter :: subname='(datm_datamode_jra): ' !------------------------------------------------------------------------------- diff --git a/dice/dice_datamode_ssmi_mod.F90 b/dice/dice_datamode_ssmi_mod.F90 index e62942efa..ac3e73636 100644 --- a/dice/dice_datamode_ssmi_mod.F90 +++ b/dice/dice_datamode_ssmi_mod.F90 @@ -127,7 +127,6 @@ subroutine dice_datamode_ssmi_advertise(importState, exportState, fldsimport, fl integer , intent(out) :: rc ! local variables - integer :: n type(fldlist_type), pointer :: fldList !------------------------------------------------------------------------------- diff --git a/dice/ice_comp_nuopc.F90 b/dice/ice_comp_nuopc.F90 index 55df6a81c..d5c73f8e0 100644 --- a/dice/ice_comp_nuopc.F90 +++ b/dice/ice_comp_nuopc.F90 @@ -280,13 +280,8 @@ subroutine InitializeRealize(gcomp, importState, exportState, clock, rc) type(ESMF_Time) :: currTime integer :: current_ymd ! model date integer :: current_year ! model year - integer :: current_mon ! model month - integer :: current_day ! model day - integer :: current_tod ! model sec into model date real(R8) :: cosarg ! for setting ice temp pattern real(R8) :: jday, jday0 ! elapsed day counters - character(CL) :: cvalue ! temporary - integer :: n,k ! generic counters integer :: model_dt ! integer model timestep character(len=*), parameter :: F00 = "('ice_comp_nuopc: ')',8a)" character(len=*), parameter :: subname=trim(modName)//':(InitializeRealize) ' diff --git a/dlnd/lnd_comp_nuopc.F90 b/dlnd/lnd_comp_nuopc.F90 index 1354b3d11..eff2d7122 100644 --- a/dlnd/lnd_comp_nuopc.F90 +++ b/dlnd/lnd_comp_nuopc.F90 @@ -72,7 +72,6 @@ module lnd_comp_nuopc integer :: ny_global ! global ny dimension of model mesh ! linked lists - type(fldList_type) , pointer :: fldsImport => null() type(fldList_type) , pointer :: fldsExport => null() type(dfield_type) , pointer :: dfields => null() @@ -271,7 +270,6 @@ subroutine InitializeRealize(gcomp, importState, exportState, clock, rc) integer :: current_mon ! model month integer :: current_day ! model day integer :: current_tod ! model sec into model date - character(CL) :: cvalue ! temporary character(len=*),parameter :: subname=trim(modName)//':(InitializeRealize) ' !------------------------------------------------------------------------------- diff --git a/docn/docn_datamode_aquaplanet_mod.F90 b/docn/docn_datamode_aquaplanet_mod.F90 index fc004f6a1..e687d8d85 100644 --- a/docn/docn_datamode_aquaplanet_mod.F90 +++ b/docn/docn_datamode_aquaplanet_mod.F90 @@ -92,7 +92,6 @@ subroutine docn_datamode_aquaplanet_init_pointers(exportState, ocn_fraction, rc) integer , intent(out) :: rc ! local variables - type(ESMF_StateItem_Flag) :: itemFlag character(len=*), parameter :: subname='(docn_init_pointers): ' !------------------------------------------------------------------------------- diff --git a/docn/ocn_comp_nuopc.F90 b/docn/ocn_comp_nuopc.F90 index 074391dc3..cca6442e2 100644 --- a/docn/ocn_comp_nuopc.F90 +++ b/docn/ocn_comp_nuopc.F90 @@ -167,8 +167,6 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) integer :: nu ! unit number integer :: ierr ! error code logical :: exists ! check for file existence - integer :: n - type(fldlist_type), pointer :: fldList character(len=*),parameter :: subname=trim(module_name)//':(InitializeAdvertise) ' character(*) ,parameter :: F00 = "('(ocn_comp_nuopc) ',8a)" character(*) ,parameter :: F01 = "('(ocn_comp_nuopc) ',a,2x,i8)" @@ -305,17 +303,12 @@ subroutine InitializeRealize(gcomp, importState, exportState, clock, rc) integer, intent(out) :: rc ! local variables - type(ESMF_TimeInterval) :: TimeStep type(ESMF_Time) :: currTime integer :: current_ymd ! model date integer :: current_year ! model year integer :: current_mon ! model month integer :: current_day ! model day integer :: current_tod ! model sec into model date - integer :: fieldcount - type(ESMF_Field) :: lfield - character(ESMF_MAXSTR) ,pointer :: lfieldnamelist(:) - integer :: n character(len=*), parameter :: subname=trim(module_name)//':(InitializeRealize) ' !------------------------------------------------------------------------------- diff --git a/drof/rof_comp_nuopc.F90 b/drof/rof_comp_nuopc.F90 index 0765c10a9..a97f6839b 100644 --- a/drof/rof_comp_nuopc.F90 +++ b/drof/rof_comp_nuopc.F90 @@ -71,7 +71,6 @@ module rof_comp_nuopc character(*) , parameter :: modName = "(rof_comp_nuopc)" ! linked lists - type(fldList_type) , pointer :: fldsImport => null() type(fldList_type) , pointer :: fldsExport => null() type(dfield_type) , pointer :: dfields => null() @@ -146,7 +145,6 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) ! local variables integer :: inst_index ! number of current instance (ie. 1) - character(len=CL) :: cvalue ! temporary integer :: nu ! unit number integer :: ierr ! error code logical :: exists ! check for file existence @@ -267,8 +265,6 @@ subroutine InitializeRealize(gcomp, importState, exportState, clock, rc) integer :: current_mon ! model month integer :: current_day ! model day integer :: current_tod ! model sec into model date - character(CL) :: cvalue ! temporary - integer :: n,k ! generic counters character(len=*), parameter :: F00 = "('rof_comp_nuopc: ')',8a)" character(len=*), parameter :: subname=trim(modName)//':(InitializeRealize) ' !------------------------------------------------------------------------------- From 1245cfa9dd1305ab63765c1586830287493a7849 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Mon, 10 Aug 2020 07:46:26 -0600 Subject: [PATCH 086/153] more cleanup --- datm/atm_comp_nuopc.F90 | 2 +- datm/datm_datamode_clmncep_mod.F90 | 15 ++++----------- datm/datm_datamode_core2_mod.F90 | 5 ++--- datm/datm_datamode_era5_mod.F90 | 5 ++--- datm/datm_datamode_jra_mod.F90 | 5 ++--- dice/dice_datamode_ssmi_mod.F90 | 5 ++--- dlnd/lnd_comp_nuopc.F90 | 2 +- docn/docn_datamode_copyall_mod.F90 | 5 ++--- docn/docn_datamode_iaf_mod.F90 | 5 ++--- docn/docn_datamode_som_mod.F90 | 5 ++--- drof/rof_comp_nuopc.F90 | 2 +- dshr/dshr_mod.F90 | 8 +------- dwav/wav_comp_nuopc.F90 | 2 +- 13 files changed, 23 insertions(+), 43 deletions(-) diff --git a/datm/atm_comp_nuopc.F90 b/datm/atm_comp_nuopc.F90 index 282db5a25..f65fbdf2a 100644 --- a/datm/atm_comp_nuopc.F90 +++ b/datm/atm_comp_nuopc.F90 @@ -589,7 +589,7 @@ subroutine datm_comp_run(importState, exportState, target_ymd, target_tod, targe call datm_datamode_jra_advance(exportstate, target_ymd, target_tod, sdat%model_calendar, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return case('CLMNCEP') - call datm_datamode_clmncep_advance(importstate, exportstate, masterproc, logunit, mpicom, rc) + call datm_datamode_clmncep_advance(masterproc, logunit, mpicom, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return case('ERA5') call datm_datamode_era5_advance(exportstate, masterproc, logunit, mpicom, target_ymd, & diff --git a/datm/datm_datamode_clmncep_mod.F90 b/datm/datm_datamode_clmncep_mod.F90 index 84a206c1a..f4664b341 100644 --- a/datm/datm_datamode_clmncep_mod.F90 +++ b/datm/datm_datamode_clmncep_mod.F90 @@ -35,8 +35,6 @@ module datm_datamode_clmncep_mod real(r8), pointer :: Sa_dens(:) => null() real(r8), pointer :: Sa_pbot(:) => null() real(r8), pointer :: Sa_pslv(:) => null() - real(r8), pointer :: Sa_co2prog(:) => null() ! co2 - real(r8), pointer :: Sa_co2diag(:) => null() ! co2 real(r8), pointer :: Faxa_lwdn(:) => null() real(r8), pointer :: Faxa_rainc(:) => null() real(r8), pointer :: Faxa_rainl(:) => null() @@ -47,7 +45,6 @@ module datm_datamode_clmncep_mod real(r8), pointer :: Faxa_swvdr(:) => null() real(r8), pointer :: Faxa_swvdf(:) => null() real(r8), pointer :: Faxa_swnet(:) => null() - real(r8), pointer :: Faxa_swdn(:) => null() ! stream data real(r8), pointer :: strm_z(:) => null() @@ -61,7 +58,6 @@ module datm_datamode_clmncep_mod real(r8), pointer :: strm_swdn(:) => null() real(r8), pointer :: strm_swdndf(:) => null() real(r8), pointer :: strm_swdndr(:) => null() - real(r8), pointer :: strm_prec(:) => null() real(r8), pointer :: strm_precc(:) => null() real(r8), pointer :: strm_precl(:) => null() real(r8), pointer :: strm_precn(:) => null() @@ -319,11 +315,9 @@ subroutine datm_datamode_clmncep_init_pointers(importState, exportState, sdat, r end subroutine datm_datamode_clmncep_init_pointers !=============================================================================== - subroutine datm_datamode_clmncep_advance(importState, exportState, masterproc, logunit, mpicom, rc) + subroutine datm_datamode_clmncep_advance(masterproc, logunit, mpicom, rc) ! input/output variables - type(ESMF_State) , intent(inout) :: importState - type(ESMF_State) , intent(inout) :: exportState logical , intent(in) :: masterproc integer , intent(in) :: logunit integer , intent(in) :: mpicom @@ -331,7 +325,7 @@ subroutine datm_datamode_clmncep_advance(importState, exportState, masterproc, l ! local variables logical :: first_time = .true. - integer :: n,kf ! indices + integer :: n ! indices integer :: lsize ! size of attr vect real(r8) :: rtmp real(r8) :: swndr @@ -546,7 +540,7 @@ end subroutine datm_datamode_clmncep_advance !=============================================================================== subroutine datm_datamode_clmncep_restart_write(case_name, inst_suffix, ymd, tod, & - logunit, mpicom, my_task, sdat) + logunit, my_task, sdat) ! input/output variables character(len=*) , intent(in) :: case_name @@ -555,12 +549,11 @@ subroutine datm_datamode_clmncep_restart_write(case_name, inst_suffix, ymd, tod, integer , intent(in) :: tod ! model sec into model date integer , intent(in) :: logunit integer , intent(in) :: my_task - integer , intent(in) :: mpicom type(shr_strdata_type) , intent(inout) :: sdat !------------------------------------------------------------------------------- call dshr_restart_write(rpfile, case_name, 'datm', inst_suffix, ymd, tod, & - logunit, mpicom, my_task, sdat) + logunit, my_task, sdat) end subroutine datm_datamode_clmncep_restart_write diff --git a/datm/datm_datamode_core2_mod.F90 b/datm/datm_datamode_core2_mod.F90 index 98a231db8..aae90a23e 100644 --- a/datm/datm_datamode_core2_mod.F90 +++ b/datm/datm_datamode_core2_mod.F90 @@ -368,7 +368,7 @@ end subroutine datm_datamode_core2_advance !=============================================================================== subroutine datm_datamode_core2_restart_write(case_name, inst_suffix, ymd, tod, & - logunit, mpicom, my_task, sdat) + logunit, my_task, sdat) ! input/output variables character(len=*) , intent(in) :: case_name @@ -377,12 +377,11 @@ subroutine datm_datamode_core2_restart_write(case_name, inst_suffix, ymd, tod, & integer , intent(in) :: tod ! model sec into model date integer , intent(in) :: logunit integer , intent(in) :: my_task - integer , intent(in) :: mpicom type(shr_strdata_type) , intent(inout) :: sdat !------------------------------------------------------------------------------- call dshr_restart_write(rpfile, case_name, 'datm', inst_suffix, ymd, tod, & - logunit, mpicom, my_task, sdat) + logunit, my_task, sdat) end subroutine datm_datamode_core2_restart_write diff --git a/datm/datm_datamode_era5_mod.F90 b/datm/datm_datamode_era5_mod.F90 index 9c7cd1d20..30f4a49ff 100644 --- a/datm/datm_datamode_era5_mod.F90 +++ b/datm/datm_datamode_era5_mod.F90 @@ -315,7 +315,7 @@ end subroutine datm_datamode_era5_advance !=============================================================================== subroutine datm_datamode_era5_restart_write(case_name, inst_suffix, ymd, tod, & - logunit, mpicom, my_task, sdat) + logunit, my_task, sdat) ! input/output variables character(len=*) , intent(in) :: case_name @@ -324,12 +324,11 @@ subroutine datm_datamode_era5_restart_write(case_name, inst_suffix, ymd, tod, & integer , intent(in) :: tod ! model sec into model date integer , intent(in) :: logunit integer , intent(in) :: my_task - integer , intent(in) :: mpicom type(shr_strdata_type) , intent(inout) :: sdat !------------------------------------------------------------------------------- call dshr_restart_write(rpfile, case_name, 'datm', inst_suffix, ymd, tod, & - logunit, mpicom, my_task, sdat) + logunit, my_task, sdat) end subroutine datm_datamode_era5_restart_write diff --git a/datm/datm_datamode_jra_mod.F90 b/datm/datm_datamode_jra_mod.F90 index 51a149c24..653e9251b 100644 --- a/datm/datm_datamode_jra_mod.F90 +++ b/datm/datm_datamode_jra_mod.F90 @@ -252,7 +252,7 @@ end subroutine datm_datamode_jra_advance !=============================================================================== subroutine datm_datamode_jra_restart_write(case_name, inst_suffix, ymd, tod, & - logunit, mpicom, my_task, sdat) + logunit, my_task, sdat) ! input/output variables character(len=*) , intent(in) :: case_name @@ -261,12 +261,11 @@ subroutine datm_datamode_jra_restart_write(case_name, inst_suffix, ymd, tod, & integer , intent(in) :: tod ! model sec into model date integer , intent(in) :: logunit integer , intent(in) :: my_task - integer , intent(in) :: mpicom type(shr_strdata_type) , intent(inout) :: sdat !------------------------------------------------------------------------------- call dshr_restart_write(rpfile, case_name, 'datm', inst_suffix, ymd, tod, & - logunit, mpicom, my_task, sdat) + logunit, my_task, sdat) end subroutine datm_datamode_jra_restart_write diff --git a/dice/dice_datamode_ssmi_mod.F90 b/dice/dice_datamode_ssmi_mod.F90 index ac3e73636..090c4f10c 100644 --- a/dice/dice_datamode_ssmi_mod.F90 +++ b/dice/dice_datamode_ssmi_mod.F90 @@ -568,7 +568,7 @@ end subroutine dice_datamode_ssmi_advance !=============================================================================== subroutine dice_datamode_ssmi_restart_write(case_name, inst_suffix, ymd, tod, & - logunit, mpicom, my_task, sdat) + logunit, my_task, sdat) ! input/output variables character(len=*) , intent(in) :: case_name @@ -577,12 +577,11 @@ subroutine dice_datamode_ssmi_restart_write(case_name, inst_suffix, ymd, tod, & integer , intent(in) :: tod ! model sec into model date integer , intent(in) :: logunit integer , intent(in) :: my_task - integer , intent(in) :: mpicom type(shr_strdata_type) , intent(inout) :: sdat !------------------------------------------------------------------------------- call dshr_restart_write(rpfile, case_name, 'dice', inst_suffix, ymd, tod, & - logunit, mpicom, my_task, sdat, fld=water, fldname='water') + logunit, my_task, sdat, fld=water, fldname='water') end subroutine dice_datamode_ssmi_restart_write diff --git a/dlnd/lnd_comp_nuopc.F90 b/dlnd/lnd_comp_nuopc.F90 index eff2d7122..ad9455ff3 100644 --- a/dlnd/lnd_comp_nuopc.F90 +++ b/dlnd/lnd_comp_nuopc.F90 @@ -375,7 +375,7 @@ subroutine ModelAdvance(gcomp, rc) call ESMF_TraceRegionEnter('dlnd_restart') call dshr_restart_write(rpfile, case_name, 'dlnd', inst_suffix, next_ymd, next_tod, & - logunit, mpicom, my_task, sdat) + logunit, my_task, sdat) call ESMF_TraceRegionExit('dlnd_restart') endif diff --git a/docn/docn_datamode_copyall_mod.F90 b/docn/docn_datamode_copyall_mod.F90 index 103e8aed6..08fb4600f 100644 --- a/docn/docn_datamode_copyall_mod.F90 +++ b/docn/docn_datamode_copyall_mod.F90 @@ -124,7 +124,7 @@ end subroutine docn_datamode_copyall_advance !=============================================================================== subroutine docn_datamode_copyall_restart_write(case_name, inst_suffix, ymd, tod, & - logunit, mpicom, my_task, sdat) + logunit, my_task, sdat) ! input/output variables character(len=*) , intent(in) :: case_name @@ -133,12 +133,11 @@ subroutine docn_datamode_copyall_restart_write(case_name, inst_suffix, ymd, tod, integer , intent(in) :: tod ! model sec into model date integer , intent(in) :: logunit integer , intent(in) :: my_task - integer , intent(in) :: mpicom type(shr_strdata_type) , intent(inout) :: sdat !------------------------------------------------------------------------------- call dshr_restart_write(rpfile, case_name, 'docn', inst_suffix, ymd, tod, & - logunit, mpicom, my_task, sdat) + logunit, my_task, sdat) end subroutine docn_datamode_copyall_restart_write diff --git a/docn/docn_datamode_iaf_mod.F90 b/docn/docn_datamode_iaf_mod.F90 index 4edc514aa..6edc5e087 100644 --- a/docn/docn_datamode_iaf_mod.F90 +++ b/docn/docn_datamode_iaf_mod.F90 @@ -178,7 +178,7 @@ end subroutine docn_datamode_iaf_advance !=============================================================================== subroutine docn_datamode_iaf_restart_write(case_name, inst_suffix, ymd, tod, & - logunit, mpicom, my_task, sdat) + logunit, my_task, sdat) ! write restart file @@ -189,12 +189,11 @@ subroutine docn_datamode_iaf_restart_write(case_name, inst_suffix, ymd, tod, & integer , intent(in) :: tod ! model sec into model date integer , intent(in) :: logunit integer , intent(in) :: my_task - integer , intent(in) :: mpicom type(shr_strdata_type) , intent(inout) :: sdat !------------------------------------------------------------------------------- call dshr_restart_write(rpfile, case_name, 'docn', inst_suffix, ymd, tod, & - logunit, mpicom, my_task, sdat) + logunit, my_task, sdat) end subroutine docn_datamode_iaf_restart_write diff --git a/docn/docn_datamode_som_mod.F90 b/docn/docn_datamode_som_mod.F90 index 2d3f7a2a2..c73a4434d 100644 --- a/docn/docn_datamode_som_mod.F90 +++ b/docn/docn_datamode_som_mod.F90 @@ -298,7 +298,7 @@ end subroutine docn_datamode_som_advance !=============================================================================== subroutine docn_datamode_som_restart_write(case_name, inst_suffix, ymd, tod, & - logunit, mpicom, my_task, sdat) + logunit, my_task, sdat) ! write restart file @@ -309,12 +309,11 @@ subroutine docn_datamode_som_restart_write(case_name, inst_suffix, ymd, tod, & integer , intent(in) :: tod ! model sec into model date integer , intent(in) :: logunit integer , intent(in) :: my_task - integer , intent(in) :: mpicom type(shr_strdata_type) , intent(inout) :: sdat !------------------------------------------------------------------------------- call dshr_restart_write(rpfile, case_name, 'docn', inst_suffix, ymd, tod, & - logunit, mpicom, my_task, sdat, fld=somtp, fldname='somtp') + logunit, my_task, sdat, fld=somtp, fldname='somtp') end subroutine docn_datamode_som_restart_write diff --git a/drof/rof_comp_nuopc.F90 b/drof/rof_comp_nuopc.F90 index a97f6839b..529409cc8 100644 --- a/drof/rof_comp_nuopc.F90 +++ b/drof/rof_comp_nuopc.F90 @@ -446,7 +446,7 @@ subroutine drof_comp_run(exportState, target_ymd, target_tod, restart_write, rc) select case (trim(datamode)) case('copyall') call dshr_restart_write(rpfile, case_name, 'drof', inst_suffix, target_ymd, target_tod, & - logunit, mpicom, my_task, sdat) + logunit, my_task, sdat) end select end if diff --git a/dshr/dshr_mod.F90 b/dshr/dshr_mod.F90 index 6b807f76e..3a2832298 100644 --- a/dshr/dshr_mod.F90 +++ b/dshr/dshr_mod.F90 @@ -224,12 +224,9 @@ subroutine dshr_mesh_init(gcomp, nullstr, logunit, compname, model_nxg, model_ny ! local variables type(ESMF_VM) :: vm - type(ESMF_Mesh) :: mesh_global type(ESMF_Calendar) :: esmf_calendar ! esmf calendar - type(ESMF_CalKind_Flag) :: esmf_caltype ! esmf calendar type type(ESMF_DistGrid) :: distGrid integer, pointer :: model_gindex(:) ! model global index spzce - character(CS) :: calendar ! calendar name integer :: mpicom integer :: my_task logical :: scol_mode @@ -820,7 +817,6 @@ subroutine dshr_alarm_init( clock, alarm, option, & type(ESMF_Time) :: CurrTime ! Current Time type(ESMF_Time) :: NextAlarm ! Next restart alarm time type(ESMF_TimeInterval) :: AlarmInterval ! Alarm interval - integer :: sec character(len=*), parameter :: & ! Clock and alarm options optNONE = "none" , & optNever = "never" , & @@ -1134,7 +1130,6 @@ subroutine dshr_time_init( Time, ymd, cal, tod, rc) ! local variables integer :: year, mon, day ! year, month, day as integers - integer :: tdate ! temporary date integer :: date ! coded-date (yyyymmdd) integer , parameter :: SecPerDay = 86400 ! Seconds per day character(len=*), parameter :: subname='(dshr_time_init)' @@ -1146,7 +1141,6 @@ subroutine dshr_time_init( Time, ymd, cal, tod, rc) call shr_sys_abort( subname//'ERROR yymmdd is a negative number or time-of-day out of bounds' ) end if - tdate = abs(date) year = int(tdate/10000) if (date < 0) year = -year mon = int( mod(tdate,10000)/ 100) @@ -1233,7 +1227,7 @@ end subroutine dshr_restart_read !=============================================================================== subroutine dshr_restart_write(rpfile, case_name, model_name, inst_suffix, ymd, tod, & - logunit, mpicom, my_task, sdat, fld, fldname) + logunit, my_task, sdat, fld, fldname) ! Write restart file diff --git a/dwav/wav_comp_nuopc.F90 b/dwav/wav_comp_nuopc.F90 index 605d3cf16..0fe275baa 100644 --- a/dwav/wav_comp_nuopc.F90 +++ b/dwav/wav_comp_nuopc.F90 @@ -358,7 +358,7 @@ subroutine ModelAdvance(gcomp, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return call dshr_restart_write(rpfile, case_name, 'dwav', inst_suffix, next_ymd, next_tod, & - logunit, mpicom, my_task, sdat) + logunit, my_task, sdat) call ESMF_TraceRegionExit('dwav_restart') endif From f2126a33b6360137df75eddf8db848cc41602380 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Mon, 10 Aug 2020 07:50:15 -0600 Subject: [PATCH 087/153] fix errors --- datm/atm_comp_nuopc.F90 | 2 +- datm/cime_config/namelist_definition_datm.xml | 26 ------------------- 2 files changed, 1 insertion(+), 27 deletions(-) diff --git a/datm/atm_comp_nuopc.F90 b/datm/atm_comp_nuopc.F90 index f65fbdf2a..7648ac850 100644 --- a/datm/atm_comp_nuopc.F90 +++ b/datm/atm_comp_nuopc.F90 @@ -187,7 +187,7 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) namelist / datm_nml / datamode, & model_meshfile, model_maskfile, model_createmesh_fromfile, & nx_global, ny_global, restfilm, iradsw, factorFn_data, factorFn_mesh, & - flds_presaero, flds_co2, flds_wiso, bias_correct, anomaly_forcing + flds_presaero, flds_co2, flds_wiso rc = ESMF_SUCCESS diff --git a/datm/cime_config/namelist_definition_datm.xml b/datm/cime_config/namelist_definition_datm.xml index 5422da40e..f41be138e 100644 --- a/datm/cime_config/namelist_definition_datm.xml +++ b/datm/cime_config/namelist_definition_datm.xml @@ -2694,32 +2694,6 @@ - - char - datm - datm_nml - BC.QIAN.CMAP.Precip,BC.QIAN.GPCP.Precip,BC.CRUNCEP.CMAP.Precip,BC.CRUNCEP.GPCP.Precip - - If set, include bias correction streams in namelist. - - - - - - - - char(10) - datm - datm_nml - Anomaly.Forcing.Precip,Anomaly.Forcing.Temperature,Anomaly.Forcing.Pressure,Anomaly.Forcing.Humidity,Anomaly.Forcing.Uwind,Anomaly.Forcing.Vwind,Anomaly.Forcing.Shortwave,Anomaly.Forcing.Longwave - - If set, include anomaly forcing streams in namelist. - - - - - - char datm From 13c94c7e374e1a804282721a01303219c93a1b8b Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Mon, 10 Aug 2020 07:56:24 -0600 Subject: [PATCH 088/153] fix error --- dshr/dshr_mod.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dshr/dshr_mod.F90 b/dshr/dshr_mod.F90 index 3a2832298..bb5db1085 100644 --- a/dshr/dshr_mod.F90 +++ b/dshr/dshr_mod.F90 @@ -1141,7 +1141,7 @@ subroutine dshr_time_init( Time, ymd, cal, tod, rc) call shr_sys_abort( subname//'ERROR yymmdd is a negative number or time-of-day out of bounds' ) end if - year = int(tdate/10000) + year = int(abs(tdate)/10000) if (date < 0) year = -year mon = int( mod(tdate,10000)/ 100) day = mod(tdate, 100) From 994aaa87cdaf0524b673cf6d2d211f34f54ec1a3 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Mon, 10 Aug 2020 07:59:11 -0600 Subject: [PATCH 089/153] fix error --- dshr/dshr_mod.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dshr/dshr_mod.F90 b/dshr/dshr_mod.F90 index bb5db1085..8fa7a9709 100644 --- a/dshr/dshr_mod.F90 +++ b/dshr/dshr_mod.F90 @@ -1141,7 +1141,7 @@ subroutine dshr_time_init( Time, ymd, cal, tod, rc) call shr_sys_abort( subname//'ERROR yymmdd is a negative number or time-of-day out of bounds' ) end if - year = int(abs(tdate)/10000) + year = int(abs(date)/10000) if (date < 0) year = -year mon = int( mod(tdate,10000)/ 100) day = mod(tdate, 100) From abd550808f9fa64a32b64932f1cc7b1ebd08add8 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Mon, 10 Aug 2020 07:59:46 -0600 Subject: [PATCH 090/153] fix error --- dshr/dshr_mod.F90 | 1 - 1 file changed, 1 deletion(-) diff --git a/dshr/dshr_mod.F90 b/dshr/dshr_mod.F90 index 8fa7a9709..6bc7ab606 100644 --- a/dshr/dshr_mod.F90 +++ b/dshr/dshr_mod.F90 @@ -1242,7 +1242,6 @@ subroutine dshr_restart_write(rpfile, case_name, model_name, inst_suffix, ymd, t integer , intent(in) :: tod ! model sec into model date integer , intent(in) :: logunit integer , intent(in) :: my_task - integer , intent(in) :: mpicom type(shr_strdata_type) , intent(inout) :: sdat real(r8) , optional , pointer :: fld(:) character(len=*) , optional , intent(in) :: fldname From dc2c91fec3ea815938ab922851da450f05da606e Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Mon, 10 Aug 2020 08:05:58 -0600 Subject: [PATCH 091/153] fix error --- dshr/dshr_mod.F90 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dshr/dshr_mod.F90 b/dshr/dshr_mod.F90 index 6bc7ab606..911cdfed6 100644 --- a/dshr/dshr_mod.F90 +++ b/dshr/dshr_mod.F90 @@ -1131,6 +1131,7 @@ subroutine dshr_time_init( Time, ymd, cal, tod, rc) ! local variables integer :: year, mon, day ! year, month, day as integers integer :: date ! coded-date (yyyymmdd) + integer :: tdate integer , parameter :: SecPerDay = 86400 ! Seconds per day character(len=*), parameter :: subname='(dshr_time_init)' !------------------------------------------------------------------------------- @@ -1141,7 +1142,8 @@ subroutine dshr_time_init( Time, ymd, cal, tod, rc) call shr_sys_abort( subname//'ERROR yymmdd is a negative number or time-of-day out of bounds' ) end if - year = int(abs(date)/10000) + tdate = abs(date) + year = int(tdate/10000) if (date < 0) year = -year mon = int( mod(tdate,10000)/ 100) day = mod(tdate, 100) From b7985866b2b2f6f5e2fe3f3691868a5b5fe4bc38 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Mon, 10 Aug 2020 08:10:11 -0600 Subject: [PATCH 092/153] fix error --- datm/atm_comp_nuopc.F90 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/datm/atm_comp_nuopc.F90 b/datm/atm_comp_nuopc.F90 index 7648ac850..db8a6985c 100644 --- a/datm/atm_comp_nuopc.F90 +++ b/datm/atm_comp_nuopc.F90 @@ -602,19 +602,19 @@ subroutine datm_comp_run(importState, exportState, target_ymd, target_tod, targe select case (trim(datamode)) case('CORE2_NYF','CORE2_IAF') call datm_datamode_core2_restart_write(case_name, inst_suffix, target_ymd, target_tod, & - logunit, mpicom, my_task, sdat) + logunit, my_task, sdat) if (ChkErr(rc,__LINE__,u_FILE_u)) return case('CORE_IAF_JRA') call datm_datamode_jra_restart_write(case_name, inst_suffix, target_ymd, target_tod, & - logunit, mpicom, my_task, sdat) + logunit, my_task, sdat) if (ChkErr(rc,__LINE__,u_FILE_u)) return case('CLMNCEP') call datm_datamode_clmncep_restart_write(case_name, inst_suffix, target_ymd, target_tod, & - logunit, mpicom, my_task, sdat) + logunit, my_task, sdat) if (ChkErr(rc,__LINE__,u_FILE_u)) return case('ERA5') call datm_datamode_era5_restart_write(case_name, inst_suffix, target_ymd, target_tod, & - logunit, mpicom, my_task, sdat) + logunit, my_task, sdat) if (ChkErr(rc,__LINE__,u_FILE_u)) return end select end if From 3db65863d01558e0f0ca9711d2dc060f5a5699e1 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Mon, 10 Aug 2020 08:16:01 -0600 Subject: [PATCH 093/153] fix error --- dice/ice_comp_nuopc.F90 | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/dice/ice_comp_nuopc.F90 b/dice/ice_comp_nuopc.F90 index d5c73f8e0..37432ed58 100644 --- a/dice/ice_comp_nuopc.F90 +++ b/dice/ice_comp_nuopc.F90 @@ -280,6 +280,9 @@ subroutine InitializeRealize(gcomp, importState, exportState, clock, rc) type(ESMF_Time) :: currTime integer :: current_ymd ! model date integer :: current_year ! model year + integer :: current_mon ! model month + integer :: current_day ! model day + integer :: current_tod ! model sec into model date real(R8) :: cosarg ! for setting ice temp pattern real(R8) :: jday, jday0 ! elapsed day counters integer :: model_dt ! integer model timestep @@ -506,7 +509,7 @@ subroutine dice_comp_run(importstate, exportstate, target_ymd, target_tod, cosar select case (trim(datamode)) case('ssmi', 'ssmi_iaf') call dice_datamode_ssmi_restart_write(case_name, inst_suffix, target_ymd, target_tod, & - logunit, mpicom, my_task, sdat) + logunit, my_task, sdat) if (ChkErr(rc,__LINE__,u_FILE_u)) return end select end if From b4e99c9944741211ac737b20eab3bf712c16f33f Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Mon, 10 Aug 2020 08:19:36 -0600 Subject: [PATCH 094/153] fix errors --- docn/ocn_comp_nuopc.F90 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docn/ocn_comp_nuopc.F90 b/docn/ocn_comp_nuopc.F90 index cca6442e2..60ba6ba1a 100644 --- a/docn/ocn_comp_nuopc.F90 +++ b/docn/ocn_comp_nuopc.F90 @@ -525,13 +525,13 @@ subroutine docn_comp_run(importState, exportState, clock, target_ymd, target_tod select case (trim(datamode)) case('sstdata','sst_aquap_file') call docn_datamode_copyall_restart_write(case_name, inst_suffix, target_ymd, target_tod, & - logunit, mpicom, my_task, sdat) + logunit, my_task, sdat) case('iaf') call docn_datamode_iaf_restart_write(case_name, inst_suffix, target_ymd, target_tod, & - logunit, mpicom, my_task, sdat) + logunit, my_task, sdat) case('som','som_aquap') call docn_datamode_som_restart_write(case_name, inst_suffix, target_ymd, target_tod, & - logunit, mpicom, my_task, sdat) + logunit, my_task, sdat) end select end if From 7de813a6dd3dc564e9651b6a9376c0c129ef3710 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Mon, 10 Aug 2020 09:25:05 -0600 Subject: [PATCH 095/153] more fixes --- datm/cime_config/buildnml | 4 -- docn/ocn_comp_nuopc.F90 | 138 +++++++++++++++++++------------------- fox | 2 +- streams/CMakeLists.txt | 2 +- 4 files changed, 71 insertions(+), 75 deletions(-) diff --git a/datm/cime_config/buildnml b/datm/cime_config/buildnml index 39ff3a179..b769bc902 100755 --- a/datm/cime_config/buildnml +++ b/datm/cime_config/buildnml @@ -86,10 +86,6 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path streams.append("topo.{}".format(datm_topo)) if datm_co2_tseries != "none": streams.append("co2tseries.{}".format(datm_co2_tseries)) - bias_correct = nmlgen.get_value("bias_correct") - streams.append(bias_correct) - anomaly_forcing = nmlgen.get_value("anomaly_forcing") - streams += anomaly_forcing stream_path = os.path.join(confdir, "datm.streams"+inst_string+".xml" ) nmlgen.create_nuopc_stream_files(config, caseroot, streams, stream_path, data_list_path) diff --git a/docn/ocn_comp_nuopc.F90 b/docn/ocn_comp_nuopc.F90 index cca6442e2..1ae4fe6a0 100644 --- a/docn/ocn_comp_nuopc.F90 +++ b/docn/ocn_comp_nuopc.F90 @@ -126,15 +126,15 @@ subroutine SetServices(gcomp, rc) ! switching to IPD versions call ESMF_GridCompSetEntryPoint(gcomp, ESMF_METHOD_INITIALIZE, & - userRoutine=dshr_model_initphase, phase=0, rc=rc) + userRoutine=dshr_model_initphase, phase=0, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return ! set entry point for methods that require specific implementation call NUOPC_CompSetEntryPoint(gcomp, ESMF_METHOD_INITIALIZE, & - phaseLabelList=(/"IPDv01p1"/), userRoutine=InitializeAdvertise, rc=rc) + phaseLabelList=(/"IPDv01p1"/), userRoutine=InitializeAdvertise, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return call NUOPC_CompSetEntryPoint(gcomp, ESMF_METHOD_INITIALIZE, & - phaseLabelList=(/"IPDv01p3"/), userRoutine=InitializeRealize, rc=rc) + phaseLabelList=(/"IPDv01p3"/), userRoutine=InitializeRealize, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return ! attach specializing method(s) @@ -175,8 +175,8 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) !------------------------------------------------------------------------------- namelist / docn_nml / datamode, & - model_meshfile, model_maskfile, model_createmesh_fromfile, & - restfilm, nx_global, ny_global, sst_constant_value + model_meshfile, model_maskfile, model_createmesh_fromfile, & + restfilm, nx_global, ny_global, sst_constant_value rc = ESMF_SUCCESS @@ -186,7 +186,7 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) ! Obtain flds_scalar values, mpi values, multi-instance values and ! set logunit and set shr logging to my log file call dshr_init(gcomp, mpicom, my_task, inst_index, inst_suffix, & - flds_scalar_name, flds_scalar_num, flds_scalar_index_nx, flds_scalar_index_ny, logunit, rc) + flds_scalar_name, flds_scalar_num, flds_scalar_index_nx, flds_scalar_index_ny, logunit, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return ! Determine logical masterproc @@ -200,18 +200,18 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) read (nu,nml=docn_nml,iostat=ierr) close(nu) if (ierr > 0) then - write(logunit,F00) 'ERROR: reading input namelist, '//trim(nlfilename)//' iostat=',ierr - call shr_sys_abort(subName//': namelist read error '//trim(nlfilename)) + write(logunit,F00) 'ERROR: reading input namelist, '//trim(nlfilename)//' iostat=',ierr + call shr_sys_abort(subName//': namelist read error '//trim(nlfilename)) end if ! write namelist input to standard out write(logunit,F00)' case_name = ',trim(case_name) write(logunit,F00)' datamode = ',trim(datamode) if (model_createmesh_fromfile /= nullstr) then - write(logunit,F00)' model_create_meshfile_fromfile = ',trim(model_createmesh_fromfile) + write(logunit,F00)' model_create_meshfile_fromfile = ',trim(model_createmesh_fromfile) else - write(logunit,F00)' model_meshfile = ',trim(model_meshfile) - write(logunit,F00)' model_maskfile = ',trim(model_maskfile) + write(logunit,F00)' model_meshfile = ',trim(model_meshfile) + write(logunit,F00)' model_maskfile = ',trim(model_maskfile) end if write(logunit,F01)' nx_global = ',nx_global write(logunit,F01)' ny_global = ',ny_global @@ -219,24 +219,24 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) ! check that files exists if (model_createmesh_fromfile /= nullstr) then - inquire(file=trim(model_createmesh_fromfile), exist=exists) - if (.not.exists) then - write(logunit, *)' ERROR: model_createmesh_fromfile '//& - trim(model_createmesh_fromfile)//' does not exist' - call shr_sys_abort(trim(subname)//' ERROR: model_createmesh_fromfile '//& - trim(model_createmesh_fromfile)//' does not exist') - end if + inquire(file=trim(model_createmesh_fromfile), exist=exists) + if (.not.exists) then + write(logunit, *)' ERROR: model_createmesh_fromfile '//& + trim(model_createmesh_fromfile)//' does not exist' + call shr_sys_abort(trim(subname)//' ERROR: model_createmesh_fromfile '//& + trim(model_createmesh_fromfile)//' does not exist') + end if else - inquire(file=trim(model_meshfile), exist=exists) - if (.not.exists) then - write(logunit, *)' ERROR: model_meshfile '//trim(model_meshfile)//' does not exist' - call shr_sys_abort(trim(subname)//' ERROR: model_meshfile '//trim(model_meshfile)//' does not exist') - end if - inquire(file=trim(model_maskfile), exist=exists) - if (.not.exists) then - write(logunit, *)' ERROR: model_maskfile '//trim(model_maskfile)//' does not exist' - call shr_sys_abort(trim(subname)//' ERROR: model_maskfile '//trim(model_maskfile)//' does not exist') - end if + inquire(file=trim(model_meshfile), exist=exists) + if (.not.exists) then + write(logunit, *)' ERROR: model_meshfile '//trim(model_meshfile)//' does not exist' + call shr_sys_abort(trim(subname)//' ERROR: model_meshfile '//trim(model_meshfile)//' does not exist') + end if + inquire(file=trim(model_maskfile), exist=exists) + if (.not.exists) then + write(logunit, *)' ERROR: model_maskfile '//trim(model_maskfile)//' does not exist' + call shr_sys_abort(trim(subname)//' ERROR: model_maskfile '//trim(model_maskfile)//' does not exist') + end if end if endif @@ -254,9 +254,9 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) if (datamode(1:9) == 'sst_aquap') then ! First determine the prescribed aquaplanet option if (len_trim(datamode) == 10) then - read(datamode(10:10),'(i1)') aquap_option + read(datamode(10:10),'(i1)') aquap_option else if (len_trim(datamode) == 11) then - read(datamode(10:11),'(i2)') aquap_option + read(datamode(10:11),'(i2)') aquap_option end if ! Now remove the index from the datamode value, to have a generic setting for later use datamode = "sst_aquap_analytic" @@ -264,12 +264,12 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) ! Validate datamode if ( trim(datamode) == 'sstdata' .or. & ! read stream, no import data - trim(datamode) == 'iaf' .or. & ! read stream, needs import data? - trim(datamode) == 'sst_aquap_file' .or. & ! read stream, no import data - trim(datamode) == 'som' .or. & ! read stream, needs import data - trim(datamode) == 'som_aquap' .or. & ! read stream, needs import data - trim(datamode) == 'sst_aquap_analytic' .or. & ! analytic, no streams, import or export data - trim(datamode) == 'sst_aquap_constant' ) then ! analytic, no streams, import or export data + trim(datamode) == 'iaf' .or. & ! read stream, needs import data? + trim(datamode) == 'sst_aquap_file' .or. & ! read stream, no import data + trim(datamode) == 'som' .or. & ! read stream, needs import data + trim(datamode) == 'som_aquap' .or. & ! read stream, needs import data + trim(datamode) == 'sst_aquap_analytic' .or. & ! analytic, no streams, import or export data + trim(datamode) == 'sst_aquap_constant' ) then ! analytic, no streams, import or export data ! success do nothing else call shr_sys_abort(' ERROR illegal docn datamode = '//trim(datamode)) @@ -317,8 +317,8 @@ subroutine InitializeRealize(gcomp, importState, exportState, clock, rc) ! Initialize model mesh, restart flag, logunit, model_mask and model_frac call ESMF_TraceRegionEnter('docn_strdata_init') call dshr_mesh_init(gcomp, nullstr, logunit, 'OCN', nx_global, ny_global, & - model_meshfile, model_maskfile, model_createmesh_fromfile, model_mesh, & - model_mask, model_frac, restart_read, rc=rc) + model_meshfile, model_maskfile, model_createmesh_fromfile, model_mesh, & + model_mask, model_frac, restart_read, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return ! Initialize stream data type if not aqua planet @@ -333,10 +333,10 @@ subroutine InitializeRealize(gcomp, importState, exportState, clock, rc) ! NUOPC_Realize "realizes" a previously advertised field in the importState and exportState ! by replacing the advertised fields with the newly created fields of the same name. call dshr_fldlist_realize( exportState, fldsExport, flds_scalar_name, flds_scalar_num, model_mesh, & - subname//trim(modelname)//':Export', rc=rc) + subname//trim(modelname)//':Export', rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return call dshr_fldlist_realize( importState, fldsImport, flds_scalar_name, flds_scalar_num, model_mesh, & - subname//trim(modelname)//':Import', rc=rc) + subname//trim(modelname)//':Import', rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return ! Get the time to interpolate the stream data to @@ -453,29 +453,29 @@ subroutine docn_comp_run(importState, exportState, clock, target_ymd, target_tod ! Initialize datamode module ponters select case (trim(datamode)) case('sstdata', 'sst_aquap_file') - call docn_datamode_copyall_init_pointers(exportState, model_frac, rc) - if (ChkErr(rc,__LINE__,u_FILE_u)) return + call docn_datamode_copyall_init_pointers(exportState, model_frac, rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return case('iaf') - call docn_datamode_iaf_init_pointers(importState, exportState, model_frac, rc) - if (ChkErr(rc,__LINE__,u_FILE_u)) return + call docn_datamode_iaf_init_pointers(importState, exportState, model_frac, rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return case('som', 'som_aquap') - call docn_datamode_som_init_pointers(importState, exportState, sdat, model_frac, rc) - if (ChkErr(rc,__LINE__,u_FILE_u)) return + call docn_datamode_som_init_pointers(importState, exportState, sdat, model_frac, rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return case('sst_aquap_analytic', 'sst_aquap_constant') - call docn_datamode_aquaplanet_init_pointers(exportState, model_frac, rc) - if (ChkErr(rc,__LINE__,u_FILE_u)) return + call docn_datamode_aquaplanet_init_pointers(exportState, model_frac, rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return end select ! Read restart if needed if (restart_read) then - select case (trim(datamode)) - case('sstdata', 'sst_aquap_file') - call docn_datamode_copyall_restart_read(restfilm, inst_suffix, logunit, my_task, mpicom, sdat) - case('iaf') - call docn_datamode_iaf_restart_read(restfilm, inst_suffix, logunit, my_task, mpicom, sdat) - case('som', 'som_aquap') - call docn_datamode_som_restart_read(restfilm, inst_suffix, logunit, my_task, mpicom, sdat) - end select + select case (trim(datamode)) + case('sstdata', 'sst_aquap_file') + call docn_datamode_copyall_restart_read(restfilm, inst_suffix, logunit, my_task, mpicom, sdat) + case('iaf') + call docn_datamode_iaf_restart_read(restfilm, inst_suffix, logunit, my_task, mpicom, sdat) + case('som', 'som_aquap') + call docn_datamode_som_restart_read(restfilm, inst_suffix, logunit, my_task, mpicom, sdat) + end select end if ! Reset first_time @@ -524,14 +524,14 @@ subroutine docn_comp_run(importState, exportState, clock, target_ymd, target_tod if (restart_write) then select case (trim(datamode)) case('sstdata','sst_aquap_file') - call docn_datamode_copyall_restart_write(case_name, inst_suffix, target_ymd, target_tod, & - logunit, mpicom, my_task, sdat) + call docn_datamode_copyall_restart_write(case_name, inst_suffix, target_ymd, target_tod, & + logunit, my_task, sdat) case('iaf') - call docn_datamode_iaf_restart_write(case_name, inst_suffix, target_ymd, target_tod, & - logunit, mpicom, my_task, sdat) + call docn_datamode_iaf_restart_write(case_name, inst_suffix, target_ymd, target_tod, & + logunit, my_task, sdat) case('som','som_aquap') - call docn_datamode_som_restart_write(case_name, inst_suffix, target_ymd, target_tod, & - logunit, mpicom, my_task, sdat) + call docn_datamode_som_restart_write(case_name, inst_suffix, target_ymd, target_tod, & + logunit, my_task, sdat) end select end if @@ -573,13 +573,13 @@ subroutine docn_init_dfields(importState, exportState, rc) call ESMF_StateGet(exportState, itemNameList=lfieldnamelist, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return do n = 1, fieldCount - call ESMF_StateGet(exportState, itemName=trim(lfieldNameList(n)), field=lfield, rc=rc) - if (chkerr(rc,__LINE__,u_FILE_u)) return - if (trim(lfieldnamelist(n)) /= flds_scalar_name) then - call dshr_dfield_add( dfields, sdat, trim(lfieldnamelist(n)), trim(lfieldnamelist(n)), exportState, & - logunit, masterproc, rc) - if (chkerr(rc,__LINE__,u_FILE_u)) return - end if + call ESMF_StateGet(exportState, itemName=trim(lfieldNameList(n)), field=lfield, rc=rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + if (trim(lfieldnamelist(n)) /= flds_scalar_name) then + call dshr_dfield_add( dfields, sdat, trim(lfieldnamelist(n)), trim(lfieldnamelist(n)), exportState, & + logunit, masterproc, rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + end if end do end subroutine docn_init_dfields diff --git a/fox b/fox index a2a181efd..0ed59c155 160000 --- a/fox +++ b/fox @@ -1 +1 @@ -Subproject commit a2a181efd1606cc85fd5f0cce5da7d643af1cac5 +Subproject commit 0ed59c15525258579efcf40369d383193f170902 diff --git a/streams/CMakeLists.txt b/streams/CMakeLists.txt index b8466cadf..013ee7a40 100644 --- a/streams/CMakeLists.txt +++ b/streams/CMakeLists.txt @@ -17,7 +17,7 @@ add_dependencies(streams FoX_dom) if(BLD_STANDALONE) add_dependencies(streams cdeps_share) endif() -target_include_directories (streams PUBLIC ${CMAKE_BINARY_DIR}/fox/modules) +target_include_directories (streams PUBLIC ${CMAKE_BINARY_DIR}/fox/include) target_include_directories (streams PUBLIC ${ESMF_F90COMPILEPATHS}) target_include_directories (streams PUBLIC ${PIO_Fortran_INCLUDE_DIR}) target_include_directories (streams PUBLIC ${CMAKE_BINARY_DIR}/share) From 7eb6ede2b72565341dfa9bf0396e2e17ef66fa36 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Mon, 10 Aug 2020 11:03:20 -0600 Subject: [PATCH 096/153] use ymd instead of date --- dice/ice_comp_nuopc.F90 | 3 --- dshr/dshr_mod.F90 | 3 +-- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/dice/ice_comp_nuopc.F90 b/dice/ice_comp_nuopc.F90 index 37432ed58..b3380fba8 100644 --- a/dice/ice_comp_nuopc.F90 +++ b/dice/ice_comp_nuopc.F90 @@ -356,9 +356,6 @@ subroutine ModelAdvance(gcomp, rc) type(ESMF_Alarm) :: alarm type(ESMF_TimeInterval) :: timeStep type(ESMF_Time) :: currTime, nextTime - integer :: current_mon ! model month - integer :: current_day ! model day - integer :: current_tod ! model sec into model date real(R8) :: cosarg ! for setting ice temp pattern real(R8) :: jday, jday0 ! elapsed day counters integer :: next_ymd ! model date diff --git a/dshr/dshr_mod.F90 b/dshr/dshr_mod.F90 index 911cdfed6..c4b1bbce7 100644 --- a/dshr/dshr_mod.F90 +++ b/dshr/dshr_mod.F90 @@ -1130,7 +1130,6 @@ subroutine dshr_time_init( Time, ymd, cal, tod, rc) ! local variables integer :: year, mon, day ! year, month, day as integers - integer :: date ! coded-date (yyyymmdd) integer :: tdate integer , parameter :: SecPerDay = 86400 ! Seconds per day character(len=*), parameter :: subname='(dshr_time_init)' @@ -1142,7 +1141,7 @@ subroutine dshr_time_init( Time, ymd, cal, tod, rc) call shr_sys_abort( subname//'ERROR yymmdd is a negative number or time-of-day out of bounds' ) end if - tdate = abs(date) + tdate = abs(ymd) year = int(tdate/10000) if (date < 0) year = -year mon = int( mod(tdate,10000)/ 100) From 08ea63cb2361e7bd6c7ec3912e1727f912aeaf3d Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Mon, 10 Aug 2020 11:17:31 -0600 Subject: [PATCH 097/153] use ymd instead of date --- dshr/dshr_mod.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dshr/dshr_mod.F90 b/dshr/dshr_mod.F90 index c4b1bbce7..4dcd96482 100644 --- a/dshr/dshr_mod.F90 +++ b/dshr/dshr_mod.F90 @@ -1143,7 +1143,7 @@ subroutine dshr_time_init( Time, ymd, cal, tod, rc) tdate = abs(ymd) year = int(tdate/10000) - if (date < 0) year = -year + if (ymd < 0) year = -year mon = int( mod(tdate,10000)/ 100) day = mod(tdate, 100) From 23fedf37ac572d236ac5e8023fb834176697da76 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Mon, 10 Aug 2020 13:58:03 -0600 Subject: [PATCH 098/153] replace bias_correction --- datm/atm_comp_nuopc.F90 | 5 +- datm/cime_config/buildnml | 4 + datm/cime_config/namelist_definition_datm.xml | 1193 +++++++++-------- 3 files changed, 617 insertions(+), 585 deletions(-) diff --git a/datm/atm_comp_nuopc.F90 b/datm/atm_comp_nuopc.F90 index db8a6985c..0b0103807 100644 --- a/datm/atm_comp_nuopc.F90 +++ b/datm/atm_comp_nuopc.F90 @@ -92,6 +92,9 @@ module atm_comp_nuopc logical :: flds_presaero = .false. ! true => send valid prescribe aero fields to mediator logical :: flds_co2 = .false. ! true => send prescribed co2 to mediator logical :: flds_wiso = .false. ! true => send water isotopes to mediator + character(CL) :: bias_correct = nullstr ! send bias correction fields to coupler + character(CL) :: anomaly_forcing(8) = nullstr ! send anomaly forcing fields to coupler + character(CL) :: restfilm = nullstr ! model restart file namelist integer :: nx_global ! global nx integer :: ny_global ! global ny @@ -187,7 +190,7 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) namelist / datm_nml / datamode, & model_meshfile, model_maskfile, model_createmesh_fromfile, & nx_global, ny_global, restfilm, iradsw, factorFn_data, factorFn_mesh, & - flds_presaero, flds_co2, flds_wiso + flds_presaero, flds_co2, flds_wiso, bias_correct, anomaly_forcing rc = ESMF_SUCCESS diff --git a/datm/cime_config/buildnml b/datm/cime_config/buildnml index b769bc902..39ff3a179 100755 --- a/datm/cime_config/buildnml +++ b/datm/cime_config/buildnml @@ -86,6 +86,10 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path streams.append("topo.{}".format(datm_topo)) if datm_co2_tseries != "none": streams.append("co2tseries.{}".format(datm_co2_tseries)) + bias_correct = nmlgen.get_value("bias_correct") + streams.append(bias_correct) + anomaly_forcing = nmlgen.get_value("anomaly_forcing") + streams += anomaly_forcing stream_path = os.path.join(confdir, "datm.streams"+inst_string+".xml" ) nmlgen.create_nuopc_stream_files(config, caseroot, streams, stream_path, data_list_path) diff --git a/datm/cime_config/namelist_definition_datm.xml b/datm/cime_config/namelist_definition_datm.xml index f41be138e..372f3d894 100644 --- a/datm/cime_config/namelist_definition_datm.xml +++ b/datm/cime_config/namelist_definition_datm.xml @@ -214,35 +214,35 @@ CLM_QIAN_WISO.Solar,CLM_QIAN_WISO.Precip,CLM_QIAN_WISO.TPQW - CLMCRUNCEPv7.Solar,CLMCRUNCEPv7.Precip,CLMCRUNCEPv7.TPQW + CLMCRUNCEPv7.Solar,CLMCRUNCEPv7.Precip,CLMCRUNCEPv7.TPQW - CLMGSWP3v1.Solar,CLMGSWP3v1.Precip,CLMGSWP3v1.TPQW + CLMGSWP3v1.Solar,CLMGSWP3v1.Precip,CLMGSWP3v1.TPQW - CLMNLDAS2.Solar,CLMNLDAS2.Precip,CLMNLDAS2.TPQW + CLMNLDAS2.Solar,CLMNLDAS2.Precip,CLMNLDAS2.TPQW - 1PT + 1PT - CORE2_NYF.GISS,CORE2_NYF.GXGXS,CORE2_NYF.NCEP + CORE2_NYF.GISS,CORE2_NYF.GXGXS,CORE2_NYF.NCEP - CORE2_IAF.GCGCS.PREC,CORE2_IAF.GISS.LWDN,CORE2_IAF.GISS.SWDN,CORE2_IAF.GISS.SWUP,CORE2_IAF.NCEP.DN10,CORE2_IAF.NCEP.Q_10,CORE2_IAF.NCEP.SLP_,CORE2_IAF.NCEP.T_10,CORE2_IAF.NCEP.U_10,CORE2_IAF.NCEP.V_10,CORE2_IAF.CORE2.ArcFactor + CORE2_IAF.GCGCS.PREC,CORE2_IAF.GISS.LWDN,CORE2_IAF.GISS.SWDN,CORE2_IAF.GISS.SWUP,CORE2_IAF.NCEP.DN10,CORE2_IAF.NCEP.Q_10,CORE2_IAF.NCEP.SLP_,CORE2_IAF.NCEP.T_10,CORE2_IAF.NCEP.U_10,CORE2_IAF.NCEP.V_10,CORE2_IAF.CORE2.ArcFactor - CORE_IAF_JRA.PREC,CORE_IAF_JRA.LWDN,CORE_IAF_JRA.SWDN,CORE_IAF_JRA.Q_10,CORE_IAF_JRA.SLP_,CORE_IAF_JRA.T_10,CORE_IAF_JRA.U_10,CORE_IAF_JRA.V_10,CORE_IAF_JRA.CORE2.ArcFactor + CORE_IAF_JRA.PREC,CORE_IAF_JRA.LWDN,CORE_IAF_JRA.SWDN,CORE_IAF_JRA.Q_10,CORE_IAF_JRA.SLP_,CORE_IAF_JRA.T_10,CORE_IAF_JRA.U_10,CORE_IAF_JRA.V_10,CORE_IAF_JRA.CORE2.ArcFactor CORE_IAF_JRA_1p4_2018.GCGCS.PREC,CORE_IAF_JRA_1p4_2018.GISS.LWDN,CORE_IAF_JRA_1p4_2018.GISS.SWDN,CORE_IAF_JRA_1p4_2018.NCEP.Q_10,CORE_IAF_JRA_1p4_2018.NCEP.SLP_,CORE_IAF_JRA_1p4_2018.NCEP.T_10,CORE_IAF_JRA_1p4_2018.NCEP.U_10,CORE_IAF_JRA_1p4_2018.NCEP.V_10 - CORE2_IAF.NCEP.DENS.SOFS,CORE2_IAF.NCEP.PSLV.SOFS,CORE2_IAF.PREC.SOFS.DAILY,CORE2_IAF.LWDN.SOFS.DAILY,CORE2_IAF.SWDN.SOFS.DAILY,CORE2_IAF.SWUP.SOFS.DAILY,CORE2_IAF.SHUM.SOFS.6HOUR,CORE2_IAF.TBOT.SOFS.6HOUR,CORE2_IAF.U.SOFS.6HOUR,CORE2_IAF.V.SOFS.6HOUR,CORE2_IAF.CORE2.ArcFactor + CORE2_IAF.NCEP.DENS.SOFS,CORE2_IAF.NCEP.PSLV.SOFS,CORE2_IAF.PREC.SOFS.DAILY,CORE2_IAF.LWDN.SOFS.DAILY,CORE2_IAF.SWDN.SOFS.DAILY,CORE2_IAF.SWUP.SOFS.DAILY,CORE2_IAF.SHUM.SOFS.6HOUR,CORE2_IAF.TBOT.SOFS.6HOUR,CORE2_IAF.U.SOFS.6HOUR,CORE2_IAF.V.SOFS.6HOUR,CORE2_IAF.CORE2.ArcFactor ERA5_HOURLY - CPLHISTForcing.Solar,CPLHISTForcing.nonSolarFlux,CPLHISTForcing.State3hr,CPLHISTForcing.State1hr + CPLHISTForcing.Solar,CPLHISTForcing.nonSolarFlux,CPLHISTForcing.State3hr,CPLHISTForcing.State1hr @@ -275,7 +275,7 @@ - $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.GSWP3.0.5d.v1.c170516/clmforc.GSWP3.c2011.0.5x0.5.TPQWL.SCRIP.210520_ESMFmesh.nc + $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.GSWP3.0.5d.v1.c170516/clmforc.GSWP3.c2011.0.5x0.5.TPQWL.SCRIP.210520_ESMFmesh.nc @@ -305,13 +305,13 @@ - $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc - $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc none @@ -323,7 +323,7 @@ $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc - $DIN_LOC_ROOT/share/meshes/TL319_151007_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/TL319_151007_ESMFmesh.nc @@ -342,19 +342,19 @@ - $ATM_DOMAIN_MESH + $ATM_DOMAIN_MESH - $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc - $ATM_DOMAIN_MESH + $ATM_DOMAIN_MESH - $DIN_LOC_ROOT/atm/datm7/topo_forcing/topodata_0.9x1.SCRIP.210520_ESMFmesh.nc + $DIN_LOC_ROOT/atm/datm7/topo_forcing/topodata_0.9x1.SCRIP.210520_ESMFmesh.nc @@ -370,43 +370,43 @@ - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/mexicocityMEX.c080124/clm1pt-1993-12.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/mexicocityMEX.c080124/clm1pt-1993-12.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/vancouverCAN.c080124/clm1pt-1992-08.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/vancouverCAN.c080124/clm1pt-1992-08.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0001-08.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0001-09.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0001-10.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0001-11.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0001-12.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-01.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-02.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-03.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-04.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-05.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-06.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-07.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-08.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-09.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-10.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-11.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0001-08.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0001-09.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0001-10.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0001-11.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0001-12.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-01.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-02.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-03.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-04.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-05.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-06.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-07.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-08.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-09.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-10.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-11.nc - $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x1hi.%ym.nc + $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x1hi.%ym.nc - $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x3h.%ym.nc + $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x3h.%ym.nc - $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x3h.%ym.nc + $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x3h.%ym.nc - $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x1h.%ym.nc + $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x1h.%ym.nc @@ -436,79 +436,79 @@ - $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.cruncep_qianFill.0.5d.v7.c160715/Solar6Hrly/clmforc.cruncep.V7.c2016.0.5d.Solr.%ym.nc + $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.cruncep_qianFill.0.5d.v7.c160715/Solar6Hrly/clmforc.cruncep.V7.c2016.0.5d.Solr.%ym.nc - $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.cruncep_qianFill.0.5d.v7.c160715/Precip6Hrly/clmforc.cruncep.V7.c2016.0.5d.Prec.%ym.nc + $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.cruncep_qianFill.0.5d.v7.c160715/Precip6Hrly/clmforc.cruncep.V7.c2016.0.5d.Prec.%ym.nc - $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.cruncep_qianFill.0.5d.v7.c160715/TPHWL6Hrly/clmforc.cruncep.V7.c2016.0.5d.TPQWL.%ym.nc + $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.cruncep_qianFill.0.5d.v7.c160715/TPHWL6Hrly/clmforc.cruncep.V7.c2016.0.5d.TPQWL.%ym.nc - $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.GSWP3.0.5d.v1.c170516/Solar/clmforc.GSWP3.c2011.0.5x0.5.Solr.%ym.nc + $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.GSWP3.0.5d.v1.c170516/Solar/clmforc.GSWP3.c2011.0.5x0.5.Solr.%ym.nc - $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.GSWP3.0.5d.v1.c170516/Precip/clmforc.GSWP3.c2011.0.5x0.5.Prec.%ym.nc + $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.GSWP3.0.5d.v1.c170516/Precip/clmforc.GSWP3.c2011.0.5x0.5.Prec.%ym.nc - $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.GSWP3.0.5d.v1.c170516/TPHWL/clmforc.GSWP3.c2011.0.5x0.5.TPQWL.%ym.nc + $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.GSWP3.0.5d.v1.c170516/TPHWL/clmforc.GSWP3.c2011.0.5x0.5.TPQWL.%ym.nc - $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.NLDAS2.0.125d.v1/Solar/ctsmforc.NLDAS2.0.125d.v1.Solr.%ym.nc + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.NLDAS2.0.125d.v1/Solar/ctsmforc.NLDAS2.0.125d.v1.Solr.%ym.nc - $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.NLDAS2.0.125d.v1/Precip/ctsmforc.NLDAS2.0.125d.v1.Prec.%ym.nc + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.NLDAS2.0.125d.v1/Precip/ctsmforc.NLDAS2.0.125d.v1.Prec.%ym.nc - $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.NLDAS2.0.125d.v1/TPQWL/ctsmforc.NLDAS2.0.125d.v1.TPQWL.%ym.nc + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.NLDAS2.0.125d.v1/TPQWL/ctsmforc.NLDAS2.0.125d.v1.TPQWL.%ym.nc - $DIN_LOC_ROOT/atm/datm7/NYF/nyf.giss.T62.051007.nc + $DIN_LOC_ROOT/atm/datm7/NYF/nyf.giss.T62.051007.nc - $DIN_LOC_ROOT/atm/datm7/NYF/nyf.gxgxs.T62.051007.nc + $DIN_LOC_ROOT/atm/datm7/NYF/nyf.gxgxs.T62.051007.nc - $DIN_LOC_ROOT/atm/datm7/NYF/nyf.ncep.T62.050923.nc + $DIN_LOC_ROOT/atm/datm7/NYF/nyf.ncep.T62.050923.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.SOFS.2010.nc + $DIN_LOC_ROOT/ocn/iaf/ncep.SOFS.2010.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.SOFS.2010.nc + $DIN_LOC_ROOT/ocn/iaf/ncep.SOFS.2010.nc - $DIN_LOC_ROOT/ocn/iaf/SOFS.daily.03-09.2010.nc + $DIN_LOC_ROOT/ocn/iaf/SOFS.daily.03-09.2010.nc - $DIN_LOC_ROOT/ocn/iaf/SOFS.daily.03-09.2010.nc + $DIN_LOC_ROOT/ocn/iaf/SOFS.daily.03-09.2010.nc - $DIN_LOC_ROOT/ocn/iaf/SOFS.daily.03-09.2010.nc + $DIN_LOC_ROOT/ocn/iaf/SOFS.daily.03-09.2010.nc - $DIN_LOC_ROOT/ocn/iaf/SOFS.daily.03-09.2010.nc + $DIN_LOC_ROOT/ocn/iaf/SOFS.daily.03-09.2010.nc - $DIN_LOC_ROOT/ocn/iaf/SOFS.6hour.03-09.2010.nc + $DIN_LOC_ROOT/ocn/iaf/SOFS.6hour.03-09.2010.nc - $DIN_LOC_ROOT/ocn/iaf/SOFS.6hour.03-09.2010.nc + $DIN_LOC_ROOT/ocn/iaf/SOFS.6hour.03-09.2010.nc - $DIN_LOC_ROOT/ocn/iaf/SOFS.6hour.03-09.2010.nc + $DIN_LOC_ROOT/ocn/iaf/SOFS.6hour.03-09.2010.nc - $DIN_LOC_ROOT/ocn/iaf/SOFS.6hour.03-09.2010.nc + $DIN_LOC_ROOT/ocn/iaf/SOFS.6hour.03-09.2010.nc $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1948.nc @@ -1151,501 +1151,501 @@ $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.2009.20120412.nc - $DIN_LOC_ROOT/atm/datm7/CORE2/CORE2.t_10.ArcFactor.T62.1997-2004.nc + $DIN_LOC_ROOT/atm/datm7/CORE2/CORE2.t_10.ArcFactor.T62.1997-2004.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1958.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1959.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1960.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1961.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1962.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1963.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1964.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1965.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1966.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1967.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1968.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1969.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1970.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1971.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1972.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1973.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1974.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1975.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1976.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1977.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1978.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1979.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1980.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1981.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1982.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1983.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1984.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1985.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1986.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1987.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1988.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1989.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1990.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1991.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1992.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1993.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1994.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1995.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1996.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1997.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1998.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1999.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2000.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2001.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2002.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2003.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2004.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2005.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2006.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2007.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2008.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2009.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2010.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2011.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2012.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2013.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2014.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2015.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2016.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1958.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1959.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1960.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1961.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1962.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1963.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1964.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1965.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1966.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1967.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1968.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1969.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1970.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1971.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1972.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1973.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1974.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1975.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1976.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1977.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1978.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1979.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1980.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1981.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1982.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1983.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1984.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1985.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1986.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1987.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1988.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1989.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1990.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1991.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1992.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1993.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1994.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1995.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1996.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1997.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1998.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1999.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2000.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2001.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2002.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2003.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2004.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2005.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2006.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2007.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2008.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2009.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2010.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2011.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2012.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2013.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2014.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2015.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2016.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1958.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1959.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1960.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1961.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1962.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1963.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1964.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1965.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1966.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1967.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1968.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1969.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1970.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1971.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1972.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1973.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1974.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1975.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1976.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1977.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1978.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1979.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1980.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1981.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1982.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1983.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1984.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1985.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1986.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1987.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1988.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1989.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1990.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1991.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1992.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1993.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1994.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1995.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1996.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1997.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1998.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1999.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2000.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2001.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2002.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2003.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2004.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2005.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2006.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2007.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2008.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2009.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2010.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2011.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2012.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2013.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2014.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2015.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2016.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1958.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1959.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1960.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1961.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1962.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1963.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1964.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1965.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1966.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1967.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1968.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1969.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1970.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1971.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1972.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1973.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1974.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1975.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1976.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1977.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1978.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1979.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1980.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1981.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1982.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1983.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1984.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1985.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1986.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1987.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1988.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1989.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1990.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1991.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1992.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1993.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1994.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1995.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1996.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1997.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1998.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1999.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2000.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2001.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2002.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2003.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2004.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2005.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2006.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2007.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2008.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2009.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2010.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2011.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2012.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2013.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2014.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2015.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2016.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1958.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1959.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1960.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1961.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1962.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1963.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1964.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1965.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1966.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1967.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1968.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1969.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1970.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1971.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1972.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1973.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1974.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1975.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1976.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1977.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1978.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1979.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1980.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1981.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1982.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1983.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1984.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1985.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1986.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1987.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1988.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1989.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1990.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1991.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1992.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1993.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1994.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1995.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1996.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1997.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1998.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1999.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2000.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2001.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2002.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2003.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2004.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2005.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2006.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2007.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2008.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2009.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2010.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2011.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2012.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2013.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2014.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2015.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2016.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1958.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1959.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1960.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1961.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1962.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1963.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1964.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1965.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1966.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1967.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1968.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1969.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1970.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1971.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1972.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1973.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1974.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1975.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1976.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1977.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1978.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1979.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1980.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1981.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1982.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1983.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1984.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1985.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1986.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1987.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1988.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1989.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1990.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1991.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1992.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1993.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1994.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1995.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1996.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1997.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1998.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1999.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2000.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2001.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2002.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2003.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2004.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2005.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2006.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2007.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2008.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2009.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2010.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2011.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2012.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2013.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2014.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2015.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2016.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1958.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1959.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1960.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1961.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1962.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1963.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1964.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1965.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1966.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1967.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1968.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1969.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1970.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1971.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1972.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1973.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1974.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1975.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1976.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1977.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1978.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1979.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1980.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1981.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1982.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1983.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1984.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1985.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1986.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1987.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1988.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1989.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1990.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1991.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1992.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1993.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1994.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1995.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1996.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1997.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1998.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1999.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2000.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2001.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2002.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2003.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2004.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2005.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2006.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2007.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2008.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2009.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2010.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2011.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2012.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2013.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2014.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2015.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2016.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1958.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1959.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1960.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1961.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1962.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1963.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1964.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1965.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1966.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1967.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1968.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1969.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1970.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1971.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1972.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1973.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1974.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1975.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1976.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1977.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1978.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1979.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1980.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1981.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1982.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1983.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1984.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1985.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1986.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1987.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1988.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1989.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1990.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1991.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1992.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1993.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1994.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1995.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1996.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1997.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1998.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1999.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2000.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2001.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2002.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2003.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2004.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2005.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2006.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2007.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2008.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2009.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2010.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2011.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2012.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2013.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2014.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2015.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2016.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1958.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1959.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1960.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1961.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1962.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1963.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1964.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1965.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1966.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1967.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1968.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1969.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1970.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1971.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1972.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1973.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1974.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1975.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1976.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1977.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1978.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1979.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1980.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1981.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1982.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1983.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1984.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1985.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1986.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1987.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1988.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1989.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1990.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1991.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1992.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1993.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1994.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1995.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1996.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1997.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1998.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1999.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2000.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2001.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2002.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2003.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2004.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2005.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2006.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2007.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2008.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2009.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2010.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2011.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2012.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2013.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2014.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2015.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2016.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1958.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1959.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1960.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1961.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1962.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1963.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1964.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1965.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1966.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1967.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1968.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1969.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1970.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1971.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1972.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1973.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1974.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1975.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1976.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1977.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1978.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1979.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1980.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1981.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1982.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1983.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1984.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1985.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1986.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1987.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1988.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1989.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1990.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1991.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1992.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1993.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1994.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1995.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1996.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1997.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1998.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1999.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2000.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2001.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2002.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2003.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2004.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2005.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2006.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2007.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2008.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2009.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2010.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2011.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2012.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2013.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2014.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2015.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2016.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1958.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1959.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1960.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1961.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1962.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1963.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1964.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1965.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1966.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1967.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1968.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1969.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1970.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1971.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1972.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1973.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1974.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1975.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1976.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1977.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1978.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1979.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1980.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1981.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1982.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1983.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1984.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1985.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1986.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1987.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1988.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1989.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1990.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1991.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1992.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1993.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1994.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1995.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1996.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1997.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1998.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1999.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2000.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2001.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2002.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2003.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2004.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2005.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2006.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2007.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2008.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2009.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2010.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2011.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2012.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2013.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2014.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2015.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2016.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1958.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1959.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1960.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1961.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1962.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1963.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1964.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1965.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1966.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1967.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1968.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1969.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1970.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1971.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1972.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1973.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1974.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1975.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1976.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1977.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1978.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1979.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1980.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1981.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1982.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1983.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1984.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1985.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1986.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1987.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1988.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1989.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1990.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1991.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1992.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1993.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1994.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1995.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1996.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1997.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1998.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1999.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2000.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2001.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2002.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2003.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2004.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2005.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2006.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2007.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2008.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2009.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2010.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2011.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2012.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2013.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2014.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2015.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2016.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1958.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1959.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1960.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1961.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1962.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1963.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1964.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1965.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1966.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1967.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1968.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1969.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1970.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1971.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1972.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1973.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1974.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1975.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1976.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1977.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1978.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1979.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1980.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1981.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1982.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1983.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1984.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1985.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1986.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1987.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1988.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1989.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1990.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1991.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1992.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1993.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1994.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1995.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1996.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1997.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1998.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1999.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2000.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2001.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2002.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2003.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2004.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2005.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2006.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2007.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2008.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2009.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2010.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2011.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2012.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2013.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2014.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2015.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2016.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1958.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1959.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1960.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1961.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1962.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1963.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1964.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1965.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1966.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1967.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1968.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1969.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1970.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1971.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1972.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1973.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1974.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1975.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1976.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1977.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1978.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1979.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1980.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1981.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1982.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1983.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1984.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1985.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1986.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1987.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1988.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1989.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1990.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1991.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1992.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1993.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1994.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1995.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1996.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1997.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1998.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1999.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2000.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2001.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2002.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2003.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2004.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2005.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2006.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2007.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2008.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2009.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2010.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2011.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2012.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2013.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2014.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2015.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2016.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1958.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1959.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1960.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1961.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1962.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1963.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1964.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1965.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1966.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1967.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1968.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1969.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1970.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1971.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1972.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1973.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1974.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1975.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1976.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1977.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1978.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1979.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1980.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1981.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1982.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1983.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1984.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1985.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1986.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1987.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1988.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1989.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1990.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1991.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1992.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1993.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1994.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1995.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1996.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1997.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1998.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1999.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2000.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2001.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2002.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2003.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2004.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2005.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2006.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2007.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2008.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2009.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2010.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2011.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2012.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2013.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2014.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2015.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2016.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1958.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1959.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1960.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1961.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1962.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1963.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1964.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1965.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1966.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1967.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1968.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1969.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1970.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1971.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1972.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1973.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1974.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1975.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1976.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1977.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1978.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1979.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1980.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1981.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1982.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1983.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1984.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1985.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1986.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1987.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1988.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1989.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1990.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1991.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1992.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1993.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1994.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1995.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1996.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1997.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1998.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1999.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2000.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2001.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2002.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2003.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2004.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2005.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2006.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2007.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2008.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2009.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2010.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2011.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2012.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2013.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2014.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2015.171019.nc + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2016.171019.nc - $DIN_LOC_ROOT/atm/datm7/CORE2/CORE2.t_10.ArcFactor.T62.1997-2004.nc + $DIN_LOC_ROOT/atm/datm7/CORE2/CORE2.t_10.ArcFactor.T62.1997-2004.nc @@ -1663,66 +1663,66 @@ $DIN_LOC_ROOT/atm/datm7/ERA5/ERA5.TL639.2019.10.200618.nc $DIN_LOC_ROOT/atm/datm7/ERA5/ERA5.TL639.2019.11.200618.nc $DIN_LOC_ROOT/atm/datm7/ERA5/ERA5.TL639.2019.12.200618.nc - + - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_global_simyr_1750-2014_CMIP6_c180929.nc + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_global_simyr_1750-2014_CMIP6_c180929.nc - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bands_simyr_1750-2015_CMIP6_c180929.nc + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bands_simyr_1750-2015_CMIP6_c180929.nc fco2_datm_global_ssp585_simyr_1750-2020_CMIP6_c200324.nc - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP1-1.9_simyr_2014-2500_CMIP6_c190514.nc + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP1-1.9_simyr_2014-2500_CMIP6_c190514.nc - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP1-2.6__simyr_2014-2500_CMIP6_c190506.nc + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP1-2.6__simyr_2014-2500_CMIP6_c190506.nc - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP2-4.5__simyr_2014-2500_CMIP6_c190506.nc + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP2-4.5__simyr_2014-2500_CMIP6_c190506.nc - $DIN_LOC_ROOT/atm/datm7/CO2/co2_datm_lat-bandsSSP3-7.0__simyr_2014-2500_CMIP6_c190506.nc + $DIN_LOC_ROOT/atm/datm7/CO2/co2_datm_lat-bandsSSP3-7.0__simyr_2014-2500_CMIP6_c190506.nc - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP4-3.4_simyr_2014-2500_CMIP6_c190514.nc + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP4-3.4_simyr_2014-2500_CMIP6_c190514.nc - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP4-6.0__simyr_2014-2500_CMIP6_c190506.nc + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP4-6.0__simyr_2014-2500_CMIP6_c190506.nc - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP5-3.4__simyr_2014-2500_CMIP6_c190506.nc + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP5-3.4__simyr_2014-2500_CMIP6_c190506.nc - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP5-8.5__simyr_2014-2500_CMIP6_c190506.nc + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP5-8.5__simyr_2014-2500_CMIP6_c190506.nc - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP1-1.9_simyr_2014-2501_CMIP6_c190514.nc + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP1-1.9_simyr_2014-2501_CMIP6_c190514.nc - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP1-2.6__simyr_2014-2501_CMIP6_c190506.nc + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP1-2.6__simyr_2014-2501_CMIP6_c190506.nc - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP2-4.5__simyr_2014-2501_CMIP6_c190506.nc + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP2-4.5__simyr_2014-2501_CMIP6_c190506.nc - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP3-7.0__simyr_2014-2501_CMIP6_c190506.nc + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP3-7.0__simyr_2014-2501_CMIP6_c190506.nc - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP4-3.4_simyr_2014-2501_CMIP6_c190514.nc + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP4-3.4_simyr_2014-2501_CMIP6_c190514.nc - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP4-6.0__simyr_2014-2501_CMIP6_c190506.nc + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP4-6.0__simyr_2014-2501_CMIP6_c190506.nc - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP5-3.4__simyr_2014-2501_CMIP6_c190506.nc + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP5-3.4__simyr_2014-2501_CMIP6_c190506.nc - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP5-8.5__simyr_2014-2501_CMIP6_c190506.nc + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP5-8.5__simyr_2014-2501_CMIP6_c190506.nc @@ -1731,10 +1731,10 @@ $DIN_LOC_ROOT/atm/datm7/bias_correction/precip/gpcp/qian/bias_correction.Prec.%y.nc - $DIN_LOC_ROOT/atm/datm7/clm_output/cruncep_precip_1deg/gpcp_1deg_bias_correction/bias_correction.Prec.%y.nc + $DIN_LOC_ROOT/atm/datm7/clm_output/cruncep_precip_1deg/gpcp_1deg_bias_correction/bias_correction.Prec.%y.nc - $DIN_LOC_ROOT/atm/datm7/bias_correction/precip/cmap/cruncep/bias_correction.Prec.%y.nc + $DIN_LOC_ROOT/atm/datm7/bias_correction/precip/cmap/cruncep/bias_correction.Prec.%y.nc @@ -1743,82 +1743,82 @@ $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc/domain.permafrostRCN_P2_ESMFmesh_120620.nc - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.pr.ccsm4.rcp45.2006-2300.nc + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.pr.ccsm4.rcp45.2006-2300.nc - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.tas.ccsm4.rcp45.2006-2300.nc + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.tas.ccsm4.rcp45.2006-2300.nc - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.ps.ccsm4.rcp45.2006-2300.nc + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.ps.ccsm4.rcp45.2006-2300.nc - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.huss.ccsm4.rcp45.2006-2300.nc + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.huss.ccsm4.rcp45.2006-2300.nc - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.uas.ccsm4.rcp45.2006-2300.nc + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.uas.ccsm4.rcp45.2006-2300.nc - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.vas.ccsm4.rcp45.2006-2300.nc + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.vas.ccsm4.rcp45.2006-2300.nc - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.rsds.ccsm4.rcp45.2006-2300.nc + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.rsds.ccsm4.rcp45.2006-2300.nc - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.rlds.ccsm4.rcp45.2006-2300.nc + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.rlds.ccsm4.rcp45.2006-2300.nc - $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x1d.%ym.nc + $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x1d.%ym.nc - $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc + $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc - $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc + $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc - $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc + $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc - $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc + $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc - $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc + $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc - $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc + $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc - $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc + $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc - $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc + $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc - $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerodep_clm_SSP126_b.e21.BSSP126cmip6.f09_g17.CMIP6-SSP1-2.6.001_2014-2101_monthly_0.9x1.25_c190523.nc + $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerodep_clm_SSP126_b.e21.BSSP126cmip6.f09_g17.CMIP6-SSP1-2.6.001_2014-2101_monthly_0.9x1.25_c190523.nc - $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerodep_clm_SSP245_b.e21.BWSSP245cmip6.f09_g17.CMIP6-SSP2-4.5-WACCM.001_2014-2101_monthly_0.9x1.25_c190401.nc + $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerodep_clm_SSP245_b.e21.BWSSP245cmip6.f09_g17.CMIP6-SSP2-4.5-WACCM.001_2014-2101_monthly_0.9x1.25_c190401.nc - $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerodep_clm_SSP370_b.e21.BWSSP370cmip6.f09_g17.CMIP6-SSP3-7.0-WACCM.001_2014-2101_monthly_0.9x1.25_c190402.nc + $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerodep_clm_SSP370_b.e21.BWSSP370cmip6.f09_g17.CMIP6-SSP3-7.0-WACCM.001_2014-2101_monthly_0.9x1.25_c190402.nc - null + null - $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerodep_clm_SSP585_b.e21.BSSP585cmip6.f09_g17.CMIP6-SSP5-8.5.001_2014-2101_monthly_0.9x1.25_c190419.nc + $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerodep_clm_SSP585_b.e21.BSSP585cmip6.f09_g17.CMIP6-SSP5-8.5.001_2014-2101_monthly_0.9x1.25_c190419.nc - $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x3h.%ym.nc + $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x3h.%ym.nc - $DIN_LOC_ROOT/atm/datm7/topo_forcing/topodata_0.9x1.25_USGS_070110_stream_c151201.nc + $DIN_LOC_ROOT/atm/datm7/topo_forcing/topodata_0.9x1.25_USGS_070110_stream_c151201.nc @@ -1869,8 +1869,8 @@ a2x3h_Sa_pbot Sa_pbot a2x3h_Sa_dens Sa_dens a2x3h_Sa_pslv Sa_pslv - a2x3h_Sa_co2diag Sa_co2diag - a2x3h_Sa_co2prog Sa_co2prog + a2x3h_Sa_co2diag Sa_co2diag + a2x3h_Sa_co2prog Sa_co2prog a2x1h_Sa_u Sa_u @@ -2574,7 +2574,7 @@ are copied into the export array and passed directly to the coupler without any special user code. Any required fields not found on an input stream will be set to zero except for aerosol deposition fields - which will be set to a special value. + which will be set to a special value. datamode = "CORE2_NYF" Coordinated Ocean-ice Reference Experiments (CORE) Version 2 Normal Year Forcing. datamode = "CORE2_IAF" @@ -2625,7 +2625,7 @@ - + char streams abs @@ -2693,6 +2693,31 @@ $ATM_NY + + char + datm + datm_nml + BC.QIAN.CMAP.Precip,BC.QIAN.GPCP.Precip,BC.CRUNCEP.CMAP.Precip,BC.CRUNCEP.GPCP.Precip + + If set, include bias correction streams in namelist. + + + + + + + + char(10) + datm + datm_nml + Anomaly.Forcing.Precip,Anomaly.Forcing.Temperature,Anomaly.Forcing.Pressure,Anomaly.Forcing.Humidity,Anomaly.Forcing.Uwind,Anomaly.Forcing.Vwind,Anomaly.Forcing.Shortwave,Anomaly.Forcing.Longwave + + If set, include anomaly forcing streams in namelist. + + + + + char From cac46133531b30a3333f7e171c2801eb5501f2b5 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Mon, 10 Aug 2020 14:16:38 -0600 Subject: [PATCH 099/153] make esmf version env var --- .github/workflows/extbuild.yml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index 821654ba1..099b0aef1 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -1,4 +1,4 @@ -# This is a basic workflow to help you get started with Actions +# This is a workflow to compile the cdeps source without cime name: extbuild # Controls when the action will run. Triggers the workflow on push or pull request # events but only for the master branch @@ -10,7 +10,6 @@ on: # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: - # Build the ESMF library, if the cache contains a previous build it will be used instead build-cdeps: runs-on: ubuntu-latest env: @@ -18,8 +17,11 @@ jobs: FC: mpifort CXX: mpicxx CPPFLAGS: "-I/usr/include -I/usr/local/include" + ESMF_VERSION: ESMF_8_1_0_beta_snapshot_25 steps: - uses: actions/checkout@v2 + # Build the ESMF library, if the cache contains a previous build + # it will be used instead - id: cache-esmf uses: actions/cache@v2 with: @@ -27,13 +29,12 @@ jobs: key: ${{ runner.os }}-ESMF - id: load-env run: sudo apt-get install gfortran wget openmpi-bin netcdf-bin libopenmpi-dev - - id: build-ESMF if: steps.cache-esmf.outputs.cache-hit != 'true' run: | - wget https://github.com/esmf-org/esmf/archive/ESMF_8_1_0_beta_snapshot_25.tar.gz - tar -xzvf ESMF_8_1_0_beta_snapshot_25.tar.gz - pushd esmf-ESMF_8_1_0_beta_snapshot_25 + wget https://github.com/esmf-org/esmf/archive/${{ env.ESMF_VERSION }}.tar.gz + tar -xzvf ${{ env.ESMF_VERSION }}.tar.gz + pushd esmf-${{ env.ESMF_VERSION }} export ESMF_DIR=`pwd` export ESMF_COMM=openmpi export ESMF_YAMLCPP="internal" From a680ed446d15b5f24419f3592d0f825fabd76eea Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Mon, 10 Aug 2020 14:27:10 -0600 Subject: [PATCH 100/153] add versions to dependencies --- .github/workflows/extbuild.yml | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index 099b0aef1..522c79fce 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -17,7 +17,11 @@ jobs: FC: mpifort CXX: mpicxx CPPFLAGS: "-I/usr/include -I/usr/local/include" + # Versions of all dependencies can be updated here ESMF_VERSION: ESMF_8_1_0_beta_snapshot_25 + PNETCDF_VERSION: pnetcdf-1.12.1 + NETCDF_FORTRAN_VERSION: v4.5.2 + PIO_VERSION: pio-2.5.1 steps: - uses: actions/checkout@v2 # Build the ESMF library, if the cache contains a previous build @@ -26,7 +30,7 @@ jobs: uses: actions/cache@v2 with: path: ~/ESMF - key: ${{ runner.os }}-ESMF + key: ${{ runner.os }}-${{ env.ESMF_VERSION }}-ESMF - id: load-env run: sudo apt-get install gfortran wget openmpi-bin netcdf-bin libopenmpi-dev - id: build-ESMF @@ -47,14 +51,14 @@ jobs: uses: actions/cache@v2 with: path: ~/pnetcdf - key: ${{ runner.os }}-pnetcdf + key: ${{ runner.os }}-${{ env.PNETCDF_VERSION}}-pnetcdf - name: pnetcdf build if: steps.cache-pnetcdf.outputs.cache-hit != 'true' run: | - wget https://parallel-netcdf.github.io/Release/pnetcdf-1.12.1.tar.gz - tar -xzvf pnetcdf-1.12.1.tar.gz + wget https://parallel-netcdf.github.io/Release/${{ env.PNETCDF_VERSION }}.tar.gz + tar -xzvf ${{ env.PNETCDF_VERSION }}.tar.gz ls -l - pushd pnetcdf-1.12.1 + pushd ${{ env.PNETCDF_VERSION }} ./configure --prefix=$HOME/pnetcdf --enable-shared --disable-cxx make make install @@ -64,15 +68,15 @@ jobs: uses: actions/cache@v2 with: path: ~/netcdf-fortran - key: ${{ runner.os }}-netcdf-fortran + key: ${{ runner.os }}-${{ env.NETCDF_VERSION }}-netcdf-fortran - name: netcdf fortran build if: steps.cache-netcdf-fortran.outputs.cache-hit != 'true' run: | sudo apt-get install libnetcdf-dev - wget https://github.com/Unidata/netcdf-fortran/archive/v4.5.2.tar.gz - tar -xzvf v4.5.2.tar.gz + wget https://github.com/Unidata/netcdf-fortran/archive/${{ env.NETCDF_VERSION }}.tar.gz + tar -xzvf ${{ env.NETCDF_VERSION }}.tar.gz ls -l - pushd netcdf-fortran-4.5.2 + pushd netcdf-fortran-* ./configure --prefix=$HOME/netcdf-fortran make make install @@ -82,18 +86,18 @@ jobs: uses: actions/cache@v2 with: path: ~/pio - key: ${{ runner.os }}-pio + key: ${{ runner.os }}-${{ env.PIO_VERSION }}.pio restore-keys: | ${{ runner.os }}-netcdf-fortran ${{ runner.os }}-pnetcdf - name: Build PIO if: steps.cache-PIO.outputs.cache-hit != 'true' run: | - wget https://github.com/NCAR/ParallelIO/releases/download/pio_2_5_1/pio-2.5.1.tar.gz - tar -xzvf pio-2.5.1.tar.gz + wget https://github.com/NCAR/ParallelIO/releases/download/pio_2_5_1/${{ env.PIO_VERSION }}.tar.gz + tar -xzvf ${{ env.PIO_VERSION }}.tar.gz mkdir build-pio pushd build-pio - cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=$HOME/pio -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off -DNetCDF_Fortran_PATH=$HOME/netcdf-fortran -DPnetCDF_PATH=$HOME/pnetcdf ../pio-2.5.1 + cmake -Wno-dev -DNetCDF_C_LIBRARY=/usr/lib/x86_64-linux-gnu/libnetcdf.so -DNetCDF_C_INCLUDE_DIR=/usr/include -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=$HOME/pio -DPIO_HDF5_LOGGING=On -DPIO_USE_MALLOC=On -DPIO_ENABLE_LOGGING=On -DPIO_ENABLE_TIMING=Off -DNetCDF_Fortran_PATH=$HOME/netcdf-fortran -DPnetCDF_PATH=$HOME/pnetcdf ../${{ env.PIO_VERSION }} make VERBOSE=1 make install popd From e1f555fe22310675467ed8850163eb0adac9dbd5 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Mon, 10 Aug 2020 14:50:22 -0600 Subject: [PATCH 101/153] fix workflow error --- .github/workflows/extbuild.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index 522c79fce..079cf7f72 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -74,7 +74,7 @@ jobs: run: | sudo apt-get install libnetcdf-dev wget https://github.com/Unidata/netcdf-fortran/archive/${{ env.NETCDF_VERSION }}.tar.gz - tar -xzvf ${{ env.NETCDF_VERSION }}.tar.gz + tar -xzvf ${{ env.NETCDF_FORTRAN_VERSION }}.tar.gz ls -l pushd netcdf-fortran-* ./configure --prefix=$HOME/netcdf-fortran @@ -88,8 +88,8 @@ jobs: path: ~/pio key: ${{ runner.os }}-${{ env.PIO_VERSION }}.pio restore-keys: | - ${{ runner.os }}-netcdf-fortran - ${{ runner.os }}-pnetcdf + ${{ runner.os }}-${{ env.NETCDF_FORTRAN_VERSION }}-netcdf-fortran + ${{ runner.os }}-${{ env.PNETCDF_VERSION }}-pnetcdf - name: Build PIO if: steps.cache-PIO.outputs.cache-hit != 'true' run: | From 7c656297c71da0ef076427a01c1bb15c740bb68e Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Mon, 10 Aug 2020 15:23:43 -0600 Subject: [PATCH 102/153] fix workflow --- .github/workflows/extbuild.yml | 4 ++-- streams/dshr_strdata_mod.F90 | 6 ------ 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/.github/workflows/extbuild.yml b/.github/workflows/extbuild.yml index 079cf7f72..845129bb4 100644 --- a/.github/workflows/extbuild.yml +++ b/.github/workflows/extbuild.yml @@ -68,12 +68,12 @@ jobs: uses: actions/cache@v2 with: path: ~/netcdf-fortran - key: ${{ runner.os }}-${{ env.NETCDF_VERSION }}-netcdf-fortran + key: ${{ runner.os }}-${{ env.NETCDF_FORTRAN_VERSION }}-netcdf-fortran - name: netcdf fortran build if: steps.cache-netcdf-fortran.outputs.cache-hit != 'true' run: | sudo apt-get install libnetcdf-dev - wget https://github.com/Unidata/netcdf-fortran/archive/${{ env.NETCDF_VERSION }}.tar.gz + wget https://github.com/Unidata/netcdf-fortran/archive/${{ env.NETCDF_FORTRAN_VERSION }}.tar.gz tar -xzvf ${{ env.NETCDF_FORTRAN_VERSION }}.tar.gz ls -l pushd netcdf-fortran-* diff --git a/streams/dshr_strdata_mod.F90 b/streams/dshr_strdata_mod.F90 index c7c55bd50..59b52574a 100644 --- a/streams/dshr_strdata_mod.F90 +++ b/streams/dshr_strdata_mod.F90 @@ -637,7 +637,6 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) real(r8), allocatable :: coszen(:) ! cosine of zenith angle integer :: todmod ! modified model dates to handle Feb 29 character(len=32) :: lstr ! local string - logical :: ltimers ! local logical for timers real(r8) :: flb,fub ! factor for lb and ub real(r8) ,pointer :: dataptr(:) ! pointer into field bundle real(r8) ,pointer :: dataptr_lb(:) ! pointer into field bundle @@ -682,11 +681,6 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) lstr = trim(istr) - ltimers = .true. - if (present(timers)) then - ltimers = timers - endif - call ESMF_TraceRegionEnter(trim(lstr)//trim(timname)//'_total') sdat%ymd = ymd From 6a35dea658293ac9d762ad6611e83b177d3ea2a7 Mon Sep 17 00:00:00 2001 From: mvertens Date: Tue, 11 Aug 2020 10:46:25 -0600 Subject: [PATCH 103/153] updates for documentation --- doc/Makefile | 2 +- doc/source/datm.rst | 126 +++++++++++ doc/source/design_details.rst | 210 ++++++++++++++++++ doc/source/index.rst | 16 +- doc/source/introduction.rst | 128 ++++++++++- doc/source/streams.rst | 398 ++++++++++++++++++++++++++++++++++ 6 files changed, 873 insertions(+), 7 deletions(-) create mode 100644 doc/source/datm.rst create mode 100644 doc/source/design_details.rst create mode 100644 doc/source/streams.rst diff --git a/doc/Makefile b/doc/Makefile index a5b7e3474..c9ca504c7 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -4,7 +4,7 @@ # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build -SPHINXPROJ = CMEPS +SPHINXPROJ = CDEPS SOURCEDIR = source BUILDDIR = build diff --git a/doc/source/datm.rst b/doc/source/datm.rst new file mode 100644 index 000000000..2d1c5c49f --- /dev/null +++ b/doc/source/datm.rst @@ -0,0 +1,126 @@ +.. _datm-datamodes: + +Data Atmosphere (DATM) +====================== + +DATM is normally used to provide observational forcing data (or +forcing data produced by a previous run using active components) to +drive prognostic components. The various ways of running DATM is referred to as its mode. + +In the case of CESM, these would be: CTSM, POP2, MOM6, POP2/CICE5-6 +and MOM6/CICE5-6. As examples, CORE2_NYF (CORE2 normal year forcing) +is the DATM mode used in driving POP2 and MOM6. On the other hand +CLM_QIAN, CLMCRUNCEP, CLMGSWP3 and CLM1PT are DATM modes using +observational data for forcing CTSM. + +.. _datm-datamodes: + +-------------------- +datamode values +-------------------- + +DATM its own set of supported ``datamode`` values that appears in the +``datm_in`` namelist input. The datamode specifies what additional +operations need to be done by DATM on *ALL* of the streams in the +``datm.streams.xml`` file. Each datamode value is also associated +with a DATM source file that carries out these operations and these are +listed in parentheses next to the mode name. + +CLMNCEP (``datm_datamode_clmncep_mod.F90``) + - In conjunction with NCEP climatological atmosphere data, provides + the atmosphere forcing favored by the Land Model Working Group when + coupling an active land model with observed atmospheric + forcing. This mode replicates code previously found in CLM (circa + 2005), before the LMWG started using the CIME coupling + infrastructure and data models to do active-land-only simulations." + +CORE2_NYF (``datm_datamode_core2_mod.F90``) + - Coordinated Ocean-ice Reference Experiments (CORE) Version 2 Normal Year Forcing." + +CORE2_IAF (``datm_datamode_core2_mod.F90``) + - In conjunction with CORE Version 2 atmospheric forcing data, + provides the atmosphere forcing when coupling an active ocean model + with observed atmospheric forcing. This mode and associated data + sets implement the CORE-IAF Version 2 forcing data, as developed by + Large and Yeager (2008) at NCAR. Note that CORE2_NYF and CORE2_IAF + work exactly the same way. + +CORE_IAF_JRA (``datm_datamode_jra_mod.F90``) + - In conjunction with JRA-55 Project, provides the atmosphere forcing + when coupling an active ocean model with observed atmospheric + forcing. This mode and associated data sets implement the JRA-55 + v1.3 forcing data." + +ERA5 (``datm_datamode_era5_mod.F90``) + - Fifth generation ECMWF atmospheric reanalysis of the global climate + +.. _datm-cime-vars: + +--------------------------------------- +Configuring DATM from CIME +--------------------------------------- + +If CDEPS is coupled to the CIME-CCS then the CIME ``$CASEMROOT`` xml +variable ``DATM_MODE`` sets the collection of streams the streams that +are associated with DATM and also sets the datm namelist variable +``datamode`` in the file ``datm_in``. The following are the supported +DATM ``datamode`` values, as defined in the file +``namelist_definition_datm.xml``. + +The following table describes the valid values of ``DATM_MODE`` +(defined in the ``config_component.xml`` file for DATM), and how they +relate to the associated input streams and the ``datamode`` namelist +variable. CIME will generate a value of ``DATM_MODE`` based on the +compset. + +CORE2_NYF, + - CORE2 normal year forcing (CESM C ang G compsets) + - streams: CORE2_NYF.GISS,CORE2_NYF.GXGXS,CORE2_NYF.NCEP + - datamode: CORE2_NYF + +CORE2_IAF + - CORE2 interannual year forcing (CESM C ang G compsets) + - streams: CORE2_IAF.GCGCS.PREC,CORE2_IAF.GISS.LWDN, + CORE2_IAF.GISS.SWDN,CORE2_IAF.GISS.SWUP, + CORE2_IAF.NCEP.DN10,CORE2_IAF.NCEP.Q_10, + CORE2_IAF.NCEP.SLP_,CORE2_IAF.NCEP.T_10,CORE2_IAF.NCEP.U_10, + CORE2_IAF.NCEP.V_10,CORE2_IAF.CORE2.ArcFactor + - datamode: CORE2_IAF + +CORE_IAF_JRA + - JRA-55 intra-annual year forcing (CESM C ang G compsets) + - streams: CORE_IAF_JRA.PREC,CORE_IAF_JRA.LWDN,CORE_IAF_JRA.SWDN, + CORE_IAF_JRA.Q_10,CORE_IAF_JRA.SLP_,CORE_IAF_JRA.T_10,CORE_IAF_JRA.U_10, + CORE_IAF_JRA.V_10,CORE_IAF_JRA.CORE2.ArcFactor + - datamode: CORE_IAF_JRA + +CLM_QIAN_WISO + - QIAN atm input data with water isotopes (CESM I compsets) + - streams: CLM_QIAN_WISO.Solar,CLM_QIAN_WISO.Precip,CLM_QIAN_WISO.TPQW + - datamode: CLMNCEP + +CLM_QIAN + - QIAN atm input data (CESM I compsets) + - streams: CLM_QIAN.Solar,CLM_QIAN.Precip,CLM_QIAN.TPQW + - datamode: CLMNCEP + +CLMCRUNCEPv7 + - CRUNCEP atm input data (CESM I compsets) + - streams: CLMCRUNCEP.Solar,CLMCRUNCEP.Precip,CLMCRUNCEP.TPQW + - datamode: CLMNCEP + +CLMGSWP3 + - GSWP3 atm input data (I compsets) + - streams: CLMGSWP3.Solar,CLMGSWP3.Precip,CLMGSWP3.TPQW + - datamode: CLMNCEP + +CLM1PT + - single point tower site atm input data + - streams: CLM1PT.$ATM_GRID + - datamode: CLMNCEP + +CPLHIST + - user generated forcing data from using coupler history files + used to spinup relevant prognostic components (for CESM this is CLM, POP and CISM) + - streams: CPLHISTForcing.Solar,CPLHISTForcing.nonSolarFlux, + - datamode: CPLHIST diff --git a/doc/source/design_details.rst b/doc/source/design_details.rst new file mode 100644 index 000000000..965d3d581 --- /dev/null +++ b/doc/source/design_details.rst @@ -0,0 +1,210 @@ +.. _design-details: + +================ + Design Details +================ + +---------------------- +Data Model Performance +---------------------- + +There are two primary costs associated with CDEPS share code: reading data and spatially mapping data. +Time interpolation is relatively cheap in the current implementation. +As much as possible, redundant operations are minimized. +The upper and lower bound mapped input data is saved between time steps to reduce mapping costs in cases where data is time interpolated more often than new data is read. +If the input data timestep is relatively small (for example, hourly data as opposed to daily or monthly data) the cost of reading input data can be quite large. +Also, there can be significant variation in cost of the data model over the coarse of the run, for instance, when new inputdata must be read and interpolated, although it's relatively predictable. +The present implementation doesn't support changing the order of operations, for instance, time interpolating the data before spatial mapping. +Because the present computations are always linear, changing the order of operations will not fundamentally change the results. +The present order of operations generally minimizes the mapping cost for typical data model use cases. + +---------------------- +IO Through Data Models +---------------------- + +At the present time, data models can only read netcdf data, and IO is handled through the PIO library using either netcdf or pnetcdf. +PIO can read the data either serially or in parallel in chunks that are approximately the global field size divided by the number of IO tasks. +If pnetcdf is used through PIO, then the pnetcdf library must be included during the build of the model. + +---------------------------------- +IO Through Data Models In CIME-CCS +---------------------------------- + +If CDEPS is used in CIME, the pnetcdf path and option is hardwired +into the ``Macros.make`` file for the specific machine. To turn on +``pnetcdf`` in the build, make sure the ``Macros.make`` variables +``PNETCDF_PATH``, ``INC_PNETCDF``, and ``LIB_PNETCDF`` are set and +that the PIO ``CONFIG_ARGS`` sets the ``PNETCDF_PATH`` argument. +Beyond just the option of selecting IO with PIO, several namelist variables are available to help optimize PIO IO performance. +Those are **TODO** - list these. +The total mpi tasks that can be used for IO is limited to the total number of tasks used by the data model. +Often though, using fewer IO tasks results in improved performance. +In general, [io_root + (num_iotasks-1)*io_stride + 1] has to be less than the total number of data model tasks. +In practice, PIO seems to perform optimally somewhere between the extremes of 1 task and all tasks, and is highly machine and problem dependent. + +------------- +Restart Files +------------- +Restart files are generated automatically by the data models based on an attribute flag received in the NUOPC cap. +The restart files must meet the CIME-CCS naming convention and an ``rpointer`` file is generated at the same time. +An ``rpointer`` file is a *restart pointer* file which contains the name of the most recently created restart file. +Normally, if restart files are read, the restart filenames are specified in the ``rpointer`` file. +Optionally though, there are namelist variables such as ``restfilm`` to specify the restart filenames via namelist. If those namelist variables are set, the ``rpointer`` file will be ignored. + +In most cases, no restart file is required for the data models to restart exactly. +This is because there is no memory between timesteps in many of the data model science modes. +If a restart file is required, it will be written automatically and then must be used to continue the previous run. + +There are separate stream restart files that only exist for +performance reasons. A stream restart file contains information about +the time axis of the input streams. This information helps reduce the +startup costs associated with reading the input dataset time axis +information. If a stream restart file is missing, the code will +restart without it but may need to reread data from the input data +files that would have been stored in the stream restart file. This +will take extra time but will not impact the results. + +.. _data-structures: + +--------------- +Stream Modules +--------------- + +The CDEPS stream code contains four modules: + +**dshr_strdata_mod.F90** + Carries out stream IO along with the spatial and + temporal interpolation of the stream data to the model mesh and + model time. Initializes the module data type ``shr_strdata_type``. + +**dshr_stream_mod.F90** + Reads in the stream xml file and returns the upper and + lower bounds of the stream data. Initializes the module data type + ``shr_stream_streamType``. + +**dshr_tinterp_mod.F90** + Determines the time interpolation factors. + +**dshr_methods_mod.F90** + Wrappers to ESMF such as getting a pointer to a field in a field bundle, etc. + +---------------- +Stream Datatypes +---------------- + +The most basic type, ``shr_stream_fileType`` is contained in +``shr_stream_mod.F90`` and specifies basic information related to a +given stream file. + +.. code-block:: Fortran + + type shr_stream_fileType + character(SHR_KIND_CL) :: name = shr_stream_file_null ! the file name + logical :: haveData = .false. ! has t-coord data been read in? + integer (SHR_KIND_IN) :: nt = 0 ! size of time dimension + integer (SHR_KIND_IN),allocatable :: date(:) ! t-coord date: yyyymmdd + integer (SHR_KIND_IN),allocatable :: secs(:) ! t-coord secs: elapsed on date + end type shr_stream_fileType + +The following type, ``shr_stream_streamType`` contains information +that encapsulates the information related to all files specific to a +target stream. (see the overview of the :ref:`stream_description_file`). + +.. code-block:: Fortran + + type shr_stream_streamType + !private ! no public access to internal components + integer :: logunit ! stdout log unit + type(iosystem_desc_t), pointer :: pio_subsystem + integer :: pio_iotype + integer :: pio_ioformat + logical :: init = .false. ! has stream been initialized + integer :: nFiles = 0 ! number of data files + integer :: yearFirst = -1 ! first year to use in t-axis (yyyymmdd) + integer :: yearLast = -1 ! last year to use in t-axis (yyyymmdd) + integer :: yearAlign = -1 ! align yearFirst with this model year + character(CS) :: taxMode = shr_stream_taxis_cycle ! cycling option for time axis + character(CS) :: tInterpAlgo = 'linear' ! algorithm to use for time interpolation + character(CS) :: mapalgo = 'bilinear' ! type of mapping - default is 'bilinear' + character(CS) :: readMode = 'single' ! stream read model - 'single' or 'full_file' + real(r8) :: dtlimit = 1.5_r8 ! delta time ratio limits for time interpolation + integer :: offset = 0 ! offset in seconds of stream data + character(CS) :: calendar = shr_cal_noleap ! stream calendar (obtained from first stream data file) + character(CL) :: meshFile = ' ' ! filename for mesh for all fields on stream (full pathname) + integer :: k_lvd = -1 ! file/sample of least valid date + integer :: n_lvd = -1 ! file/sample of least valid date + logical :: found_lvd = .false. ! T <=> k_lvd,n_lvd have been set + integer :: k_gvd = -1 ! file/sample of greatest valid date + integer :: n_gvd = -1 ! file/sample of greatest valid date + logical :: found_gvd = .false. ! T <=> k_gvd,n_gvd have been set + logical :: fileopen = .false. ! is current file open + character(CL) :: currfile = ' ' ! current filename + integer :: nvars ! number of stream variables + character(CL) :: stream_vectors ! stream vectors names + type(file_desc_t) :: currpioid ! current pio file desc + type(shr_stream_file_type) , allocatable :: file(:) ! filenames of stream data files (full pathname) + type(shr_stream_data_variable), allocatable :: varlist(:) ! stream variable names (on file and in model) + end type shr_stream_streamType + +Finally, the datatypes ``shr_strdata_per_stream`` and +``shr_strdata_type`` in ``dshr_strdata_mod.F90`` are at the heart +of the CDEPS stream code and contains information for +all the streams that are active for the target data model. + +.. code-block:: Fortran + + type shr_strdata_perstream + character(CL) :: stream_meshfile ! stream mesh file from stream txt file + type(ESMF_Mesh) :: stream_mesh ! stream mesh created from stream mesh file + type(io_desc_t) :: stream_pio_iodesc ! stream pio descriptor + logical :: stream_pio_iodesc_set =.false. ! true=>pio iodesc has been set + type(ESMF_RouteHandle) :: routehandle ! stream n -> model mesh mapping + character(CL), allocatable :: fldlist_stream(:) ! names of stream file fields + character(CL), allocatable :: fldlist_model(:) ! names of stream model fields + integer :: stream_lb ! index of the Lowerbound (LB) in fldlist_stream + integer :: stream_ub ! index of the Upperbound (UB) in fldlist_stream + type(ESMF_Field) :: field_stream ! a field on the stream data domain + type(ESMF_Field) :: stream_vector ! a vector field on the stream data domain + type(ESMF_FieldBundle), allocatable :: fldbun_data(:) ! stream field bundle interpolated to model grid + type(ESMF_FieldBundle) :: fldbun_model ! stream n field bundle interpolated to model grid and time + integer :: ucomp = -1 ! index of vector u in stream + integer :: vcomp = -1 ! index of vector v in stream + integer :: ymdLB = -1 ! stream ymd lower bound + integer :: todLB = -1 ! stream tod lower bound + integer :: ymdUB = -1 ! stream ymd upper bound + integer :: todUB = -1 ! stream tod upper bound + real(r8) :: dtmin = 1.0e30_r8 + real(r8) :: dtmax = 0.0_r8 + type(ESMF_Field) :: field_coszen ! needed for coszen time interp + end type shr_strdata_perstream + +.. code-block:: Fortran + + type shr_strdata_type + type(shr_strdata_perstream), allocatable :: pstrm(:) ! stream info + type(shr_stream_streamType), pointer :: stream(:)=> null() ! stream datatype + integer :: nvectors ! number of vectors + logical :: masterproc + integer :: logunit ! stdout unit + integer :: io_type ! pio info + integer :: io_format ! pio info + integer :: modeldt = 0 ! model dt in seconds + type(ESMF_Mesh) :: model_mesh ! model mesh + real(r8), pointer :: model_lon(:) => null() ! model longitudes + real(r8), pointer :: model_lat(:) => null() ! model latitudes + integer :: model_nxg ! model global domain lon size + integer :: model_nyg ! model global domain lat size + integer :: model_nzg ! model global domain vertical size + integer :: model_lsize ! model local domain size + integer, pointer :: model_gindex(:) ! model global index spzce + integer :: model_gsize ! model global domain size + type(ESMF_CLock) :: model_clock ! model clock + character(CL) :: model_calendar = shr_cal_noleap ! model calendar for ymd,tod + integer :: ymd, tod ! model time + type(iosystem_desc_t), pointer :: pio_subsystem => null() ! pio info + real(r8) :: eccen = SHR_ORB_UNDEF_REAL ! cosz t-interp info + real(r8) :: mvelpp = SHR_ORB_UNDEF_REAL ! cosz t-interp info + real(r8) :: lambm0 = SHR_ORB_UNDEF_REAL ! cosz t-interp info + real(r8) :: obliqr = SHR_ORB_UNDEF_REAL ! cosz t-interp info + real(r8), allocatable :: tavCoszen(:) ! cosz t-interp data + end type shr_strdata_type diff --git a/doc/source/index.rst b/doc/source/index.rst index 443090706..6d81fe430 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -5,11 +5,14 @@ CDEPS documentation =================== -The Community Data Models for Earth Prediction Systems (CMEPS) is a -NUOPC-compliant Mediator component used for coupling Earth system -model components. It is currently being used in NCAR's Community -Earth System Model (CESM) and NOAA's subseasonal-to-seasonal -coupled system. + +The Community Data Models for Earth Predictive Systems (CDEPS) +contains a set of NUOPC-compliant data components along with +ESMF-based share code that enables new capabilities in selectively +removing feedbacks in coupled model systems. The CDEPS data +models perform the basic function of reading external data files, +modifying those data, and then sending the data back to the CMEPS +mediator. Table of contents ----------------- @@ -18,3 +21,6 @@ Table of contents :numbered: introduction.rst + streams.rst + design_details.rst + datm.rst diff --git a/doc/source/introduction.rst b/doc/source/introduction.rst index 8507d8ccb..baf9209e5 100644 --- a/doc/source/introduction.rst +++ b/doc/source/introduction.rst @@ -1,4 +1,130 @@ +.. _data-model-introduction: + Introduction ============ -Content to go here: +-------- +Overview +-------- + +The Community Data Models for Earth Predictive Systems (CDEPS) +contains a set of NUOPC-compliant data components along with +ESMF-based "stream" code that enables new capabilities in selectively +removing feedbacks in coupled model systems. The CDEPS data +models perform the basic function of reading external data files, +modifying those data, and then sending the data back to the CMEPS +mediator. The fields sent to the mediator are the same as those that +would be sent by an active component. This takes advantage of the +fact that the mediator and other CMEPS-compliant model components have +no fundamental knowledge of whether another component is fully active +or just a data component. + +CDEPS is completely ESMF based. As a result, regridding between the +stream resolution and the model resolution can occur at run time for +any regridding option that ESMF supports. In addition, the PIO library +is used so that all of the stream data is read in parallel by the +CDEPS stream code. + +The CDEPS data models typically read gridded data from a variety of sources +including observations, reanalysis products or output data from a +previous model simulation. Out of the box, they often provide a few +possible data sources and/or time periods that you can choose from +when setting up a case. + +In some cases, data models have prognostic functionality, that is, +they also receive and use data sent by the mediator. However, in most +cases, the data models are not running prognostically and have no need +to receive any data from the mediator. + +The CIME data models have parallel capability and share significant +amounts of source code. Methods for reading and interpolating data +have been established and can easily be reused: The data model calls +strdata ("stream data") methods which then call stream methods. The +stream methods are responsible for managing lists of input data files +and their time axes. The information is then passed up to the strdata +methods where the data is read and interpolated in space and time. +The interpolated data is passed up to the data model where final +fields are derived, packed, and returned to the mediator. + +--------- +Code Tree +--------- + +CDEPS contains the following code tree: + +=============== ========================================= +Directory Function +=============== ========================================= +cime_config CIME Case Control System +cmake Build (can be used with or without CIME) +datm data atmosphere component +dice data sea-ice component +dlnd data land component +docn data ocean component +drof data river component +dwav data wave component +dshr shared NUOPC cap code +share shared utility code +streams code to handle streams +=============== ========================================= + +------ +Design +------ + +Data models function by reading in different ``streams`` of input +data. A ``stream`` is defined as a set of data files containing a set +of fields, where all the fields are on the same stream mesh and have +the same time coordinates. Data models input falls into two +categories: stream-independent and stream-dependent data. + +**stream-dependent-data** + Stream-dependent input is contained in the input xml file + ``d{model_name}.streams.xml``, where ``model_name`` can be ``atm``, + ``ice``, ``lnd``, ``ocn``, ``rof`` or ``wav``. Multiple streams can + be specified in the this xml file (see + :ref:`streams`). In turn, each stream in the xml file + can be associated with multiple stream input files. The data across + all the stream input files must all be on the same stream mesh and + share the same time coordinates. + +**stream-independent-data** + Stream-independent input is contained in the input namelist file + file ``d{model_name}_in``. This file specifies a data model mesh + file, a data model mask file along with other stream-independent + data model specific configuration variables. In addition, each + ``d{model_name}_in`` namelist file contains a namelist variable + ``datamode`` which specifies the additional operations that need to + be performed on the input streams to create the data model export + state. + +Data models leverage the CDEPS stream code to spatially interpolate the +stream data to the model resolution and temporarlly interpolate the +data to the model time. The CDEPS stream code carries this out as +follows: + +* The two timestamps of input data that bracket the present model time are read first. + These are called the lower and upper bounds of data and will change as the model advances. +* The lower and upper bound data are then spatially mapped to the + model grid based upon the in the ``d{model_name}.streams.xml`` node + ``mapalgo``. Spatial interpolation only occurs if the input data + grid and model grid are not identical, and this is determined in the + strdata module automatically. +* Time interpolation is the final step and is done using a time + interpolation method specified in the ``d{model_name}.streams.xml`` + node ``tintalgo``. +* A final set of fields is then available to the data model on the + model grid and for the current model time. +* Each data model component communicates with the NUOPC mediator and + exchanges fields on only the data model mesh. + +----------------------------------- +CDEPS and CIME Control System (CCS) +----------------------------------- + +If the CDEPS data models are used in conjunction with the CIME Case Control System (CCS) then the following will also hold: +Each data model has an xml variable in ``env_run.xml`` that specifies the data model mode. +These are: ``DATM_MODE``, ``DICE_MODE``, ``DLND_MODE``, ``DOCN_MODE``, ``DROF_MODE``, ``DWAV_MODE``. +Each data model mode specifies the streams that are associated with that data model. + +More details of the data model design are covered in :ref:`design details`. diff --git a/doc/source/streams.rst b/doc/source/streams.rst new file mode 100644 index 000000000..c2f7d9073 --- /dev/null +++ b/doc/source/streams.rst @@ -0,0 +1,398 @@ +.. _input-streams: + +Input Streams +============= + +-------- +Overview +-------- + +An *input data stream* is a time-series of input data files where all +the fields in the stream are located in the same data file and all +share the same spatial and temporal coordinates (ie. are all on the +same grid and share the same time axis). Normally a time axis has a +uniform dt, but this is not a requirement. + +The data models can have multiple input streams. + +The data for one stream may be all in one file or may be spread over +several files. For example, 50 years of monthly average data might be +contained all in one data file or it might be spread over 50 files, +each containing one year of data. + +The data models can *loop* over stream data -- i.e., repeatedly cycle +over some subset of an input stream's time axis. When looping, the +models can only loop over whole years. For example, an input stream +might have SST data for years 1950 through 2000, but a model could +loop over the data for years 1960 through 1980. A model *cannot* loop +over partial years, for example, from 1950-Feb-10 through 1980-Mar-15. + +The input data must be in a netcdf file and the time axis in that file +must be CF-1.0 compliant. + +There are two main categories of information that the data models need +to know about a stream: + +- data that describes what a user wants -- what streams to use and how + to use them -- things that can be changed by a user. + +- data that describes the stream data -- meta-data about the inherent + properties of the data itself -- things that cannot be changed by a + user. + +Generally, information about what streams a user wants to use and how +to use them is input via the strdata ("stream data") Fortran namelist, +while meta-data that describes the stream data itself is found in an +xml-like text file called a "stream description file." + +.. _stream_description_file: + +-------------------------------------------------- +Data Model Stream XML Input +-------------------------------------------------- + +The data models advance in time discretely. At a given time, the +stream code is called to advance the data model by readind in fields +from input files. Those input files have data on a discrete time axis +as well. Each data point in the input files is associated with a +discrete time (as opposed to a time interval). Depending on whether +you pick lower, upper, nearest, linear, or coszen, the data in the +input file will be "interpolated" to the time in the model. + +Stream-dependent input is contained in an input xml file +``d{model_name}.streams.xml``, where ``model_name`` can be ``atm``, +``ice``, ``lnd``, ``ocn``, ``rof`` or ``wav``. Multiple streams can +be specified in the this xml file (see :ref:`streams`). + +The schema for this xml file is as follows:: + + + + + + + + + + + + + + + + + + + + + + + +where: + +**taxMode** + How to handle data outside the specified stream time axis. + Valid options are to cycle the data based on the first, last, and align + settings associated with the stream dataset, to extend the first and last + valid value indefinitely, or to limit the interpolated data to fall only between + the least and greatest valid value of the time array. Valid values are: + + extend = extrapolate before and after the period by using the first or last value. + + cycle = cycle between the range of data + + limit = restrict to the period for which the data is valid + + CIME-CCS default = cycle + +**tInterpAlgo** + time interpolation algorithm option. Valid values are: + + lower = Use lower time-value + + upper = Use upper time-value + + nearest = Use the nearest time-value + + linear = Linearly interpolate between the two time-values + + coszen = Scale according to the cosine of the solar zenith angle (for solar) + + CIME-CCS default = linear + +**dtlimit** + Specifies delta time ratio limits placed on the time interpolation + associated with the array of streams. Causes the model to stop if + the ratio of the running maximum delta time divided by the minimum delta time + is greater than the dtlimit for that stream. + + For instance, with daily data, the delta time should be exactly one + day throughout the dataset and the computed maximum divided by + minimum delta time should always be 1.0. For monthly data, the + delta time should be between 28 and 31 days and the maximum ratio + should be about 1.1. The running value of the delta time is + computed as data is read and any wraparound or cycling is also + included. this input helps trap missing data or errors in cycling. + to turn off trapping, set the value to 1.0e30 or something similar. + + CIME-CCS default=1.5 + +**stream_mapalgo** + spatial interpolation algorithms to map stream data on stream mesh + to stream data on model mesh. Valid values are: + + redist, bilinear consf + +**stream_vectors** + paired vector field names + +**stream_data_files** + Each entry contains a data files to use. If there is + more than one file, the files must be in chronological order, that + is, the dates in time axis of the first file are before the dates + in the time axis of the second file. + +**stream_data_variables** + Each entry contains a paired list with the name of the + variable in the netCDF file on the left and the name of the + corresponding model variable on the right. + +**stream_offset** + The offset allows a user to shift the time axis of a data stream by + a fixed and constant number of seconds. For instance, if a data set + contains daily average data with timestamps for the data at the end + of the day, it might be appropriate to shift the time axis by 12 + hours so the data is taken to be at the middle of the day instead of + the end of the day. This feature supports only simple shifts in + seconds as a way of correcting input data time axes without having + to modify the input data time axis manually. This feature does not + support more complex shifts such as end of month to mid-month. But + in conjunction with the time interpolation methods in the strdata + input, hopefully most user needs can be accommodated with the two + settings. Note that a positive offset advances the input data time + axis forward by that number of seconds. + + As an example of offsets, if the input data is at 0, 3600, 7200, + 10800 seconds (hourly) and you set an offset of 1800, then the input + data will be set at times 1800, 5400, 9000, and 12600. So a model + at time 3600 using linear interpolation would have data at "n=2" + with offset of 0 will have data at "n=(2+3)/2" with an offset + of 1800. n=2 is the 2nd data in the time list 0, 3600, 7200, 10800 + in this example. n=(2+3)/2 is the average of the 2nd and 3rd data + in the time list 0, 3600, 7200, 10800. offset can be positive or + negative. + + CIME-CCS default = 0 + +**yearFirst** + the first year of stream data that will be used + +**yearLast** + the last year of stream data that will be used + +**yearAlign** + the simulation year corresponding to ``yearFirst``. + + A common usage is to set this to the first year of the model run + (for CIME-CCS this would correspond to the xml variable + ``RUN_STARTDATE``). With this setting, the forcing in the first year + of the run will be the forcing of year ``yearFirst``. + + Another usage is to align the calendar of transient forcing with + the model calendar. For example, setting ``yearAlign`` = + ``yearFirst`` will lead to the forcing calendar being the same as + the model calendar. The forcing for a given model year would be the + forcing of the same year. This would be appropriate in transient + runs where the model calendar is setup to span the same year range + as the forcing data. + + *The following pertains to CIME-CCS details for yearAlign usage* + + For some data model modes, ``yearAlign`` can be set via an xml variable + whose name ends with ``YR_ALIGN`` (there are a few such xml variables, + each pertaining to a particular data model mode). + + An example of this is land-only historical simulations in which we run + the model for 1850 to 2010 using atmospheric forcing data that is only + available for 1901 to 2010. In this case, we want to run the model for + years 1850 (so ``RUN_STARTDATE`` has year 1850) through 1900 by looping + over the forcing data for 1901-1920, and then run the model for years + 1901-2010 using the forcing data from 1901-2010. To do this, initially set:: + + ./xmlchange DATM_CLMNCEP_YR_ALIGN=1901 + ./xmlchange DATM_CLMNCEP_YR_START=1901 + ./xmlchange DATM_CLMNCEP_YR_END=1920 + + When the model has completed year 1900, set:: + + ./xmlchange DATM_CLMNCEP_YR_ALIGN=1901 + ./xmlchange DATM_CLMNCEP_YR_START=1901 + ./xmlchange DATM_CLMNCEP_YR_END=2010 + + With this setup, the correlation between model run year and forcing year + looks like this:: + + RUN Year : 1850 ... 1860 1861 ... 1870 ... 1880 1881 ... 1890 ... 1900 1901 ... 2010 + FORCE Year : 1910 ... 1920 1901 ... 1910 ... 1920 1901 ... 1910 ... 1920 1901 ... 2010 + + Setting ``DATM_CLMNCEP_YR_ALIGN`` to 1901 tells the code that you want + to align model year 1901 with forcing data year 1901, and then it + calculates what the forcing year should be if the model starts in year 1850. + +.. _input-namelists: + +-------------------------------------------------- +Data Model Namelist Input +-------------------------------------------------- + +Each data model has an associated input namelist file, ``d{model_name}_in``, +where ``model_name=[datm,dlnd,dice,docn,drof,dwav]``. + +The following namelist variables appear in each data model namelist: + +**dataMode** + component specific mode. + + Each CIME data model has its own datamode values as described below: + + :ref:`datm dataMode` + + :ref:`dice dataMode` + + :ref:`dlnd dataMode` + + :ref:`docn dataMode` + + :ref:`drof dataMode` + + :ref:`dwav dataMode` + +--------------------------------------------------- + CIME-CCS Customization of stream description files +---------------------------------------------------- + +Each data model's **cime-config/buildnml** utility automatically +generates the required stream description files for the case. The +directory contents of each data model will look like the following +(using DATM as an example) :: + + $CIMEROOT/components/data_comps/datm/cime_config/buildnml + $CIMEROOT/components/data_comps/datm/cime_config/namelist_definition_datm.xml + +The ``namelist_definition_datm.xml`` file defines and sets default +values for all the namelist variables and associated groups and also +provides out-of-the box settings for the target data model and target +stream. **buildnml** utilizes these two files to construct the stream +files for the given compset settings. You can modify the generated +stream files for your particular needs by doing the following: + +1. Copy the relevant description file from ``$CASEROOT/CaseDocs`` to + ``$CASEROOT``. Change the permission of the file to write. + +2. Edit the ``$CASEROOT`` file with your desired changes. + + - *Be sure not to put any tab characters in the file: use spaces + instead*. + +3. Call **preview_namelists** and verify that your changes do indeed + appear in the resultant stream description file appear in + ``CaseDocs/{model_name}streams.xml``. These changes will + also appear in ``$RUNDIR/{model_name}.streams.xml``. + + +-------------------------------------------------- +Data Model Stream Inline API +-------------------------------------------------- + +As mentioned previously, the streams code can be used from either a +CDEPS data model **OR** inline calls from a prognostic component. This +is a very powerful feature in that data model input can be obtained +using standardized interfaces and ESMF online mapping. + +The inline API assumes that there is **only one stream** and consists +of two calls: one to initialize the stream data type +(``shr_strdata_init``): + +.. code-block:: Fortran + + call shr_strdata_init_from_inline(sdat, my_task, logunit, compname, & + model_clock, model_mesh, & + stream_meshfile, stream_mapalgo, & + stream_filenames, stream_fldlistFile, stream_fldListModel, & + stream_yearFirst, stream_yearLast, stream_yearAlign, & + stream_offset, stream_taxmode, rc) + + type(shr_strdata_type) , intent(inout) :: sdat ! stream data type + integer , intent(in) :: my_task ! my mpi task + integer , intent(in) :: logunit ! stdout logunit + character(len=*) , intent(in) :: compname ! component name (e.g. ATM, OCN, ...) + type(ESMF_Clock) , intent(in) :: model_clock ! model clock + type(ESMF_Mesh) , intent(in) :: model_mesh ! model mesh + character(len=*) , intent(in) :: stream_meshFile ! full pathname to stream mesh file + character(len=*) , intent(in) :: stream_mapalgo ! stream mesh -> model mesh mapping type + character(len=*) , intent(in) :: stream_filenames(:) ! stream data filenames (full pathnamesa) + character(len=*) , intent(in) :: stream_fldListFile(:) ! file field names, colon delim list + character(len=*) , intent(in) :: stream_fldListModel(:) ! model field names, colon delim list + integer , intent(in) :: stream_yearFirst ! first year to use + integer , intent(in) :: stream_yearLast ! last year to use + integer , intent(in) :: stream_yearAlign ! align yearFirst with this model year + integer , intent(in) :: stream_offset ! offset in seconds of stream data + character(len=*) , intent(in) :: stream_taxMode ! time axis mode + integer , intent(out) :: rc ! error code + +and one to advance the stream (``shr_strdata_advance``): + +.. code-block:: Fortran + + subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) + + type(shr_strdata_type) ,intent(inout) :: sdat ! stream data type + integer ,intent(in) :: ymd ! current model date + integer ,intent(in) :: tod ! current model date + integer ,intent(in) :: logunit ! stdout logunit + character(len=*) ,intent(in) :: istr ! string used for timing output + integer ,intent(out) :: rc ! error code + +-------------------------------------------------- +Handling Stream Calendars +-------------------------------------------------- + +Handling stream calendars can be tricky if there are mismatches +between the stream and data model calendars. CDEPS always uses the +stream calendar for time interpolation for reasons described below. +When there is a calendar mismatch, Feb 29 is supported in a special +way as needed to get reasonable values. Note that when Feb 29 needs +to be treated specially, a discontinuity will be introduced. The size +of that discontinuity will depend on the time series input data. +Four cases can occur: + +1. The stream calendar and model calendar are identical + Proceed in the standard way. + +2. The stream is a no leap calendar and the model is gregorian calendar. + Time interpolate on the noleap calendar. If the model date is Feb 29, + compute stream data for Feb 28 by setting model time to Feb 28. + This results in duplicate stream data on Feb 28 and Feb 29 and a + discontinuity at the start of Feb 29. This could potentially be fixed + by using the gregorian calendar for time interpolation when the input data + is relatively infrequent (say greater than daily) with the following concerns. + + - The forcing will not be reproduced identically on the same day with + with climatological inputs data + + - Input data with variable input frequency might behave funny + + - An arbitrary discontinuity will be introduced in the time + interpolation method based upon the logic chosen to transition + from reproducing Feb 28 on Feb 29 and interpolating to Feb 29. + + - The time gradient of data will change by adding a day arbitrarily. + +3. The stream is a gregorian calendar and the model is a noleap calendar + Time interpolate on the gregorian calendar. This causes Feb 29 + stream data to be skipped and lead to a discontinuity at the start + of March 1. + +4. The calendars mismatch and none of the above + If the calendars mismatch and neither of the three cases above are + recognized, then abort. From 8ed166f7be2e7a116324e62a43687bb4e6fcb44f Mon Sep 17 00:00:00 2001 From: Mariana Vertenstein Date: Tue, 11 Aug 2020 14:58:26 -0600 Subject: [PATCH 104/153] udpates for PR requests --- streams/dshr_methods_mod.F90 | 3 --- streams/dshr_strdata_mod.F90 | 44 ++++++++++++++++++------------------ 2 files changed, 22 insertions(+), 25 deletions(-) diff --git a/streams/dshr_methods_mod.F90 b/streams/dshr_methods_mod.F90 index c748a29ae..b16d0ad4f 100644 --- a/streams/dshr_methods_mod.F90 +++ b/streams/dshr_methods_mod.F90 @@ -117,9 +117,6 @@ subroutine dshr_state_diagnose(State, flds_scalar_name, string, rc) ! no local data elseif (lrank == 1) then if (size(dataPtr1d) > 0) then - ! - call ESMF_LogWrite('DEBUG: '//trim(lfieldnamelist(n)), ESMF_LOGMSG_INFO) - ! write(msgString,'(A,3g14.7,i8)') trim(string)//': '//trim(lfieldnamelist(n)), & minval(dataPtr1d), maxval(dataPtr1d), sum(dataPtr1d), size(dataPtr1d) else diff --git a/streams/dshr_strdata_mod.F90 b/streams/dshr_strdata_mod.F90 index aa92f5ec8..737d4bc68 100644 --- a/streams/dshr_strdata_mod.F90 +++ b/streams/dshr_strdata_mod.F90 @@ -751,7 +751,7 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) ! local variables integer :: ns ! stream index integer :: nf ! field index - integer :: i,l ! generic indices + integer :: i,lev ! generic indices logical , allocatable :: newData(:) integer , allocatable :: ymdmod(:) ! modified model dates to handle Feb 29 real(r8), allocatable :: coszen(:) ! cosine of zenith angle @@ -1011,8 +1011,8 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) call dshr_fldbun_getfldptr(sdat%pstrm(ns)%fldbun_data(sdat%pstrm(ns)%stream_ub), & sdat%pstrm(ns)%fldlist_model(nf), fldptr2=dataptr2d_ub, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - do l = 1,sdat%pstrm(ns)%stream_nlev - dataptr2d(l,:) = dataptr2d_lb(l,:) * flb + dataptr2d_ub(l,:) * fub + do lev = 1,sdat%pstrm(ns)%stream_nlev + dataptr2d(lev,:) = dataptr2d_lb(lev,:) * flb + dataptr2d_ub(lev,:) * fub end do else call dshr_fldbun_getfldptr(sdat%pstrm(ns)%fldbun_model, & @@ -1304,7 +1304,7 @@ subroutine shr_strdata_readstrm(sdat, per_stream, stream, fldbun_data, & integer(i2), allocatable :: data_short(:) integer(i2) :: fillvalue_i2 character(CS) :: uname, vname - integer :: i, l + integer :: i, lev logical :: checkflag = .false. character(*), parameter :: subname = '(shr_strdata_readstrm) ' character(*), parameter :: F00 = "('(shr_strdata_readstrm) ',8a)" @@ -1456,19 +1456,19 @@ subroutine shr_strdata_readstrm(sdat, per_stream, stream, fldbun_data, & call shr_sys_abort(' ERROR: reading in variable: '// trim(per_stream%fldlist_stream(nf))) end if if (handlefill) then - do l = 1,stream_nlev + do lev = 1,stream_nlev do n = 1,size(dataptr2d, dim=2) - if (.not. shr_infnan_isnan(data_real2d(n,l)) .and. data_real2d(n,l) .ne. fillvalue_r4) then - dataptr2d(l,n) = real(data_real2d(n,l), kind=r8) ! Note the order of indices + if (.not. shr_infnan_isnan(data_real2d(n,lev)) .and. data_real2d(n,lev) .ne. fillvalue_r4) then + dataptr2d(lev,n) = real(data_real2d(n,lev), kind=r8) ! Note the order of indices else - dataptr2d(l,n) = r8fill + dataptr2d(lev,n) = r8fill endif enddo end do else - do l = 1,stream_nlev + do lev = 1,stream_nlev do n = 1,size(dataptr2d, dim=2) - dataptr2d(l,n) = real(data_real2d(n,l), kind=r8) + dataptr2d(lev,n) = real(data_real2d(n,lev), kind=r8) end do end do end if @@ -1508,19 +1508,19 @@ subroutine shr_strdata_readstrm(sdat, per_stream, stream, fldbun_data, & call shr_sys_abort(' ERROR: reading in 2d double variable: '// trim(per_stream%fldlist_stream(nf))) end if if (handlefill) then - do l = 1,stream_nlev + do lev = 1,stream_nlev do n = 1,size(dataptr2d, dim=2) - if (.not. shr_infnan_isnan(data_dbl2d(n,l)) .and. data_dbl2d(n,l) .ne. fillvalue_r8) then - dataptr2d(l,n) = data_dbl2d(n,l) + if (.not. shr_infnan_isnan(data_dbl2d(n,lev)) .and. data_dbl2d(n,lev) .ne. fillvalue_r8) then + dataptr2d(lev,n) = data_dbl2d(n,lev) else - dataptr2d(l,n) = r8fill + dataptr2d(lev,n) = r8fill endif enddo end do else - do l = 1,stream_nlev + do lev = 1,stream_nlev do n = 1,size(dataptr2d, dim=2) - dataptr2d(l,n) = data_dbl2d(n,l) + dataptr2d(lev,n) = data_dbl2d(n,lev) end do end do end if @@ -1562,19 +1562,19 @@ subroutine shr_strdata_readstrm(sdat, per_stream, stream, fldbun_data, & call shr_sys_abort(' ERROR: reading in 2d short variable: '// trim(per_stream%fldlist_stream(nf))) end if if (handlefill) then - do l = 1,stream_nlev + do lev = 1,stream_nlev do n = 1,lsize - if(data_short2d(n,l).eq.fillvalue_i2) then - dataptr2d(l,n) = r8fill + if(data_short2d(n,lev) .eq. fillvalue_i2) then + dataptr2d(lev,n) = r8fill else - dataptr2d(l,n) = real(data_short2d(l,n),r8) * scale_factor + add_offset + dataptr2d(lev,n) = real(data_short2d(lev,n),r8) * scale_factor + add_offset endif enddo end do else - do l = 1,stream_nlev + do lev = 1,stream_nlev do n = 1,lsize - dataptr2d(l,n) = real(data_short2d(n,l),r8) * scale_factor + add_offset + dataptr2d(lev,n) = real(data_short2d(n,lev),r8) * scale_factor + add_offset enddo end do end if From 6f33826c7a9580a5cc3a3ac2e4351da1da9b7761 Mon Sep 17 00:00:00 2001 From: Mariana Vertenstein Date: Fri, 14 Aug 2020 19:47:11 -0600 Subject: [PATCH 105/153] new stream_definition_xxx.xml --- datm/cime_config/buildnml | 26 +- datm/cime_config/namelist_definition_datm.xml | 2525 +-------------- datm/cime_config/stream_definition_datm.xml | 2734 +++++++++++++++++ dice/cime_config/buildnml | 11 +- dice/cime_config/namelist_definition_dice.xml | 342 +-- dice/cime_config/stream_definition_dice.xml | 54 + dlnd/cime_config/buildnml | 13 +- dlnd/cime_config/namelist_definition_dlnd.xml | 246 +- dlnd/cime_config/stream_definition_dlnd.xml | 43 + docn/cime_config/buildnml | 15 +- docn/cime_config/namelist_definition_docn.xml | 359 +-- docn/cime_config/stream_definition_docn.xml | 145 + drof/cime_config/buildnml | 13 +- drof/cime_config/namelist_definition_drof.xml | 437 +-- drof/cime_config/stream_definition_drof.xml | 286 ++ dwav/cime_config/buildnml | 10 +- dwav/cime_config/namelist_definition_dwav.xml | 253 +- dwav/cime_config/stream_definition_dwav.xml | 32 + 18 files changed, 3430 insertions(+), 4114 deletions(-) create mode 100644 datm/cime_config/stream_definition_datm.xml create mode 100644 dice/cime_config/stream_definition_dice.xml create mode 100644 dlnd/cime_config/stream_definition_dlnd.xml create mode 100644 docn/cime_config/stream_definition_docn.xml create mode 100644 drof/cime_config/stream_definition_drof.xml create mode 100644 dwav/cime_config/stream_definition_dwav.xml diff --git a/datm/cime_config/buildnml b/datm/cime_config/buildnml index 39ff3a179..e7fb72cf8 100755 --- a/datm/cime_config/buildnml +++ b/datm/cime_config/buildnml @@ -20,6 +20,7 @@ from CIME.nmlgen import NamelistGenerator from CIME.utils import expect, get_model, safe_copy from CIME.buildnml import create_namelist_infile, parse_input, copy_inputs_to_rundir from CIME.XML.files import Files +from CIME.XML.stream_cdeps import StreamCDEPS logger = logging.getLogger(__name__) @@ -78,20 +79,27 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path namelist_file = os.path.join(confdir, "datm_in") nmlgen.write_output_file(namelist_file, data_list_path, groups=['datm_nml']) - # Generate datm.streams.xml - streams = nmlgen.get_streams() + # Determine streams + streamlist = nmlgen.get_streams() if datm_presaero != "none": - streams.append("presaero.{}".format(datm_presaero)) + streamlist.append("presaero.{}".format(datm_presaero)) if datm_topo != "none": - streams.append("topo.{}".format(datm_topo)) + streamlist.append("topo.{}".format(datm_topo)) if datm_co2_tseries != "none": - streams.append("co2tseries.{}".format(datm_co2_tseries)) + streamlist.append("co2tseries.{}".format(datm_co2_tseries)) bias_correct = nmlgen.get_value("bias_correct") - streams.append(bias_correct) + if bias_correct is not None: + streamlist.append(bias_correct) anomaly_forcing = nmlgen.get_value("anomaly_forcing") - streams += anomaly_forcing - stream_path = os.path.join(confdir, "datm.streams"+inst_string+".xml" ) - nmlgen.create_nuopc_stream_files(config, caseroot, streams, stream_path, data_list_path) + if anomaly_forcing[0] is not None: + streamlist += anomaly_forcing + + # Generate datm.streams.xml + stream_definition_file = os.path.join(_CIMEROOT, "src", "components", + "cdeps", "datm", "cime_config", "stream_definition_datm.xml") + streams = StreamCDEPS(stream_definition_file, case) + outfile = os.path.join(confdir, "datm.streams"+inst_string+".xml" ) + streams.create_stream_xml(streamlist, case, outfile) ############################################################################### def buildnml(case, caseroot, compname): diff --git a/datm/cime_config/namelist_definition_datm.xml b/datm/cime_config/namelist_definition_datm.xml index 128dee0de..9c5cec0e0 100644 --- a/datm/cime_config/namelist_definition_datm.xml +++ b/datm/cime_config/namelist_definition_datm.xml @@ -4,208 +4,11 @@ - - - - - - char(100) streams streams_file - List of streams used for the given datm_mode + List of streams used for the given DATM_MODE CLM_QIAN.Solar,CLM_QIAN.Precip,CLM_QIAN.TPQW @@ -247,2330 +50,6 @@ - - char - streams - streams_file - Stream domain file directory. - - - - - - $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/clmforc.Qian.c2006.T62.ESMFmesh_120620.nc - - - - - - $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/clmforc.Qian.c2006.T62.ESMFmesh_120620.nc - - - - - - $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.cruncep_qianFill.0.5d.v7.c160715/clmforc.cruncep.V7.c2016.0.5d.ESMFmesh_260520.nc - - - - - - $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.GSWP3.0.5d.v1.c170516/clmforc.GSWP3.c2011.0.5x0.5.TPQWL.SCRIP.210520_ESMFmesh.nc - - - - - - $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.NLDAS2.0.125d.v1/ctsmforc.NLDAS2.0.125d.v1.ESMFmesh_120620.nc - - - - - - none - - - - - - - - - - - - - - - - - - $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc - - - - - - $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc - - - none - - - - - - $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc - - - $DIN_LOC_ROOT/share/meshes/TL319_151007_ESMFmesh.nc - - - - - - $DIN_LOC_ROOT/share/meshes/TL639_200618_ESMFmesh.nc - - - - - - - none - - - - - - $ATM_DOMAIN_MESH - - - $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc - - - - - - $ATM_DOMAIN_MESH - - - $DIN_LOC_ROOT/atm/datm7/topo_forcing/topodata_0.9x1.SCRIP.210520_ESMFmesh.nc - - - - - - char - streams - streams_file - Stream domain file directory. - - null - - - - - char - streams - streams_file - Stream data file path(s). - - null - - - - - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/mexicocityMEX.c080124/clm1pt-1993-12.nc - - - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/vancouverCAN.c080124/clm1pt-1992-08.nc - - - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0001-08.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0001-09.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0001-10.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0001-11.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0001-12.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-01.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-02.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-03.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-04.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-05.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-06.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-07.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-08.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-09.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-10.nc - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-11.nc - - - - - - $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x1hi.%ym.nc - - - $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x3h.%ym.nc - - - $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x3h.%ym.nc - - - $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x1h.%ym.nc - - - - - - $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/Solar6Hrly/clmforc.Qian.c2006.T62.Solr.%ym.nc - - - $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/Precip6Hrly/clmforc.Qian.c2006.T62.Prec.%ym.nc - - - $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/TmpPrsHumWnd3Hrly/clmforc.Qian.c2006.T62.TPQW.%ym.nc - - - - - - $DIN_LOC_ROOT/atm/datm7/atm_forcing_iso.datm7.Qian.T62.c080727/Solar6Hrly/clmforc.Qian.c2006.T62.Solr.%ym.nc - - - $DIN_LOC_ROOT/atm/datm7/atm_forcing_iso.datm7.Qian.T62.c080727/Precip6Hrly/clmforc.Qian.c2006.T62.Prec.%ym.nc - - - $DIN_LOC_ROOT/atm/datm7/atm_forcing_iso.datm7.Qian.T62.c080727/TmpPrsHumWnd3Hrly/clmforc.Qian.c2006.T62.TPQW.%ym.nc - - - - - - $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.cruncep_qianFill.0.5d.v7.c160715/Solar6Hrly/clmforc.cruncep.V7.c2016.0.5d.Solr.%ym.nc - - - $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.cruncep_qianFill.0.5d.v7.c160715/Precip6Hrly/clmforc.cruncep.V7.c2016.0.5d.Prec.%ym.nc - - - $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.cruncep_qianFill.0.5d.v7.c160715/TPHWL6Hrly/clmforc.cruncep.V7.c2016.0.5d.TPQWL.%ym.nc - - - $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.GSWP3.0.5d.v1.c170516/Solar/clmforc.GSWP3.c2011.0.5x0.5.Solr.%ym.nc - - - $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.GSWP3.0.5d.v1.c170516/Precip/clmforc.GSWP3.c2011.0.5x0.5.Prec.%ym.nc - - - $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.GSWP3.0.5d.v1.c170516/TPHWL/clmforc.GSWP3.c2011.0.5x0.5.TPQWL.%ym.nc - - - - - - $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.NLDAS2.0.125d.v1/Solar/ctsmforc.NLDAS2.0.125d.v1.Solr.%ym.nc - - - $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.NLDAS2.0.125d.v1/Precip/ctsmforc.NLDAS2.0.125d.v1.Prec.%ym.nc - - - $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.NLDAS2.0.125d.v1/TPQWL/ctsmforc.NLDAS2.0.125d.v1.TPQWL.%ym.nc - - - - - - $DIN_LOC_ROOT/atm/datm7/NYF/nyf.giss.T62.051007.nc - - - $DIN_LOC_ROOT/atm/datm7/NYF/nyf.gxgxs.T62.051007.nc - - - $DIN_LOC_ROOT/atm/datm7/NYF/nyf.ncep.T62.050923.nc - - - - - - $DIN_LOC_ROOT/ocn/iaf/ncep.SOFS.2010.nc - - - $DIN_LOC_ROOT/ocn/iaf/ncep.SOFS.2010.nc - - - $DIN_LOC_ROOT/ocn/iaf/SOFS.daily.03-09.2010.nc - - - $DIN_LOC_ROOT/ocn/iaf/SOFS.daily.03-09.2010.nc - - - $DIN_LOC_ROOT/ocn/iaf/SOFS.daily.03-09.2010.nc - - - $DIN_LOC_ROOT/ocn/iaf/SOFS.daily.03-09.2010.nc - - - $DIN_LOC_ROOT/ocn/iaf/SOFS.6hour.03-09.2010.nc - - - $DIN_LOC_ROOT/ocn/iaf/SOFS.6hour.03-09.2010.nc - - - $DIN_LOC_ROOT/ocn/iaf/SOFS.6hour.03-09.2010.nc - - - $DIN_LOC_ROOT/ocn/iaf/SOFS.6hour.03-09.2010.nc - - - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1948.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1949.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1950.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1951.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1952.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1953.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1954.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1955.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1956.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1957.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1958.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1959.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1960.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1961.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1962.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1963.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1964.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1965.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1966.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1967.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1968.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1969.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1970.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1971.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1972.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1973.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1974.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1975.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1976.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1977.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1978.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1979.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1980.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1981.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1982.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1983.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1984.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1985.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1986.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1987.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1988.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1989.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1990.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1991.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1992.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1993.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1994.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1995.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1996.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1997.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1998.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.1999.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.2000.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.2001.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.2002.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.2003.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.2004.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.2005.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.2006.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.2007.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.2008.20120412.nc - $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.2009.20120412.nc - - - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1948.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1949.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1950.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1951.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1952.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1953.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1954.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1955.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1956.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1957.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1958.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1959.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1960.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1961.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1962.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1963.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1964.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1965.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1966.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1967.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1968.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1969.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1970.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1971.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1972.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1973.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1974.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1975.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1976.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1977.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1978.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1979.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1980.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1981.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1982.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1983.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1984.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1985.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1986.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1987.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1988.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1989.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1990.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1991.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1992.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1993.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1994.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1995.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1996.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1997.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1998.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.1999.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.2000.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.2001.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.2002.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.2003.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.2004.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.2005.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.2006.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.2007.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.2008.20120412.nc - $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.2009.20120412.nc - - - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1948.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1949.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1950.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1951.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1952.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1953.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1954.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1955.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1956.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1957.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1958.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1959.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1960.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1961.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1962.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1963.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1964.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1965.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1966.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1967.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1968.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1969.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1970.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1971.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1972.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1973.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1974.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1975.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1976.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1977.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1978.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1979.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1980.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1981.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1982.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1983.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1984.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1985.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1986.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1987.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1988.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1989.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1990.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1991.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1992.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1993.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1994.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1995.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1996.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1997.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1998.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.1999.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.2000.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.2001.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.2002.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.2003.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.2004.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.2005.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.2006.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.2007.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.2008.20120412.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.2009.20120412.nc - - - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1948.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1949.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1950.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1951.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1952.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1953.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1954.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1955.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1956.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1957.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1958.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1959.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1960.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1961.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1962.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1963.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1964.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1965.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1966.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1967.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1968.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1969.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1970.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1971.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1972.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1973.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1974.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1975.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1976.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1977.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1978.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1979.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1980.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1981.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1982.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1983.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1984.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1985.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1986.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1987.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1988.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1989.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1990.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1991.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1992.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1993.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1994.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1995.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1996.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1997.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1998.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.1999.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.2000.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.2001.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.2002.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.2003.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.2004.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.2005.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.2006.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.2007.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.2008.20120412.nc - $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.2009.20120412.nc - - - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1948.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1949.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1950.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1951.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1952.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1953.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1954.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1955.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1956.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1957.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1958.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1959.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1960.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1961.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1962.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1963.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1964.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1965.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1966.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1967.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1968.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1969.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1970.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1971.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1972.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1973.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1974.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1975.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1976.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1977.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1978.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1979.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1980.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1981.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1982.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1983.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1984.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1985.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1986.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1987.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1988.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1989.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1990.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1991.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1992.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1993.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1994.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1995.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1996.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1997.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1998.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.1999.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.2000.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.2001.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.2002.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.2003.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.2004.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.2005.20120414.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.2006.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.2007.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.2008.20120412.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.2009.20120412.nc - - - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1948.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1949.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1950.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1951.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1952.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1953.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1954.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1955.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1956.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1957.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1958.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1959.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1960.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1961.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1962.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1963.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1964.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1965.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1966.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1967.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1968.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1969.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1970.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1971.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1972.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1973.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1974.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1975.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1976.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1977.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1978.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1979.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1980.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1981.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1982.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1983.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1984.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1985.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1986.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1987.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1988.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1989.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1990.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1991.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1992.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1993.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1994.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1995.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1996.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1997.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1998.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.1999.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.2000.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.2001.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.2002.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.2003.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.2004.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.2005.20120414.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.2006.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.2007.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.2008.20120412.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.2009.20120412.nc - - - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1948.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1949.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1950.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1951.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1952.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1953.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1954.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1955.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1956.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1957.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1958.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1959.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1960.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1961.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1962.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1963.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1964.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1965.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1966.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1967.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1968.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1969.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1970.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1971.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1972.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1973.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1974.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1975.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1976.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1977.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1978.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1979.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1980.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1981.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1982.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1983.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1984.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1985.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1986.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1987.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1988.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1989.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1990.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1991.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1992.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1993.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1994.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1995.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1996.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1997.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1998.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.1999.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.2000.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.2001.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.2002.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.2003.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.2004.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.2005.20120414.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.2006.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.2007.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.2008.20120412.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.2009.20120412.nc - - - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1948.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1949.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1950.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1951.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1952.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1953.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1954.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1955.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1956.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1957.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1958.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1959.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1960.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1961.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1962.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1963.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1964.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1965.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1966.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1967.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1968.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1969.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1970.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1971.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1972.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1973.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1974.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1975.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1976.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1977.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1978.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1979.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1980.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1981.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1982.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1983.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1984.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1985.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1986.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1987.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1988.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1989.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1990.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1991.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1992.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1993.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1994.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1995.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1996.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1997.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1998.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.1999.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.2000.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.2001.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.2002.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.2003.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.2004.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.2005.20120414.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.2006.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.2007.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.2008.20120412.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.2009.20120412.nc - - - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1948.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1949.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1950.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1951.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1952.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1953.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1954.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1955.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1956.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1957.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1958.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1959.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1960.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1961.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1962.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1963.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1964.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1965.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1966.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1967.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1968.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1969.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1970.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1971.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1972.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1973.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1974.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1975.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1976.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1977.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1978.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1979.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1980.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1981.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1982.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1983.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1984.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1985.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1986.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1987.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1988.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1989.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1990.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1991.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1992.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1993.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1994.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1995.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1996.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1997.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1998.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.1999.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.2000.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.2001.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.2002.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.2003.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.2004.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.2005.20120414.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.2006.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.2007.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.2008.20120412.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.2009.20120412.nc - - - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1948.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1949.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1950.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1951.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1952.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1953.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1954.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1955.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1956.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1957.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1958.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1959.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1960.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1961.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1962.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1963.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1964.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1965.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1966.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1967.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1968.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1969.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1970.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1971.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1972.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1973.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1974.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1975.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1976.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1977.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1978.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1979.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1980.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1981.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1982.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1983.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1984.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1985.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1986.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1987.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1988.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1989.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1990.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1991.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1992.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1993.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1994.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1995.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1996.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1997.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1998.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.1999.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.2000.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.2001.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.2002.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.2003.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.2004.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.2005.20120414.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.2006.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.2007.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.2008.20120412.nc - $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.2009.20120412.nc - - - $DIN_LOC_ROOT/atm/datm7/CORE2/CORE2.t_10.ArcFactor.T62.1997-2004.nc - - - - - - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1958.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1959.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1960.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1961.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1962.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1963.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1964.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1965.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1966.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1967.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1968.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1969.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1970.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1971.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1972.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1973.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1974.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1975.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1976.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1977.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1978.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1979.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1980.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1981.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1982.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1983.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1984.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1985.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1986.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1987.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1988.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1989.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1990.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1991.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1992.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1993.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1994.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1995.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1996.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1997.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1998.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.1999.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2000.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2001.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2002.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2003.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2004.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2005.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2006.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2007.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2008.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2009.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2010.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2011.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2012.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2013.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2014.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2015.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.2016.171019.nc - - - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1958.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1959.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1960.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1961.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1962.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1963.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1964.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1965.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1966.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1967.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1968.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1969.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1970.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1971.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1972.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1973.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1974.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1975.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1976.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1977.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1978.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1979.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1980.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1981.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1982.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1983.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1984.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1985.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1986.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1987.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1988.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1989.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1990.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1991.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1992.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1993.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1994.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1995.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1996.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1997.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1998.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.1999.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2000.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2001.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2002.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2003.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2004.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2005.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2006.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2007.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2008.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2009.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2010.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2011.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2012.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2013.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2014.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2015.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.2016.171019.nc - - - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1958.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1959.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1960.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1961.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1962.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1963.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1964.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1965.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1966.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1967.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1968.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1969.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1970.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1971.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1972.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1973.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1974.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1975.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1976.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1977.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1978.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1979.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1980.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1981.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1982.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1983.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1984.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1985.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1986.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1987.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1988.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1989.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1990.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1991.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1992.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1993.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1994.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1995.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1996.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1997.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1998.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.1999.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2000.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2001.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2002.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2003.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2004.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2005.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2006.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2007.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2008.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2009.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2010.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2011.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2012.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2013.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2014.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2015.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.2016.171019.nc - - - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1958.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1959.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1960.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1961.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1962.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1963.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1964.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1965.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1966.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1967.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1968.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1969.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1970.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1971.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1972.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1973.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1974.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1975.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1976.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1977.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1978.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1979.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1980.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1981.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1982.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1983.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1984.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1985.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1986.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1987.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1988.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1989.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1990.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1991.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1992.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1993.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1994.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1995.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1996.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1997.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1998.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.1999.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2000.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2001.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2002.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2003.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2004.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2005.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2006.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2007.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2008.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2009.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2010.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2011.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2012.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2013.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2014.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2015.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.2016.171019.nc - - - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1958.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1959.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1960.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1961.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1962.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1963.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1964.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1965.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1966.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1967.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1968.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1969.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1970.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1971.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1972.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1973.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1974.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1975.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1976.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1977.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1978.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1979.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1980.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1981.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1982.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1983.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1984.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1985.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1986.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1987.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1988.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1989.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1990.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1991.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1992.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1993.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1994.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1995.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1996.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1997.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1998.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.1999.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2000.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2001.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2002.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2003.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2004.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2005.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2006.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2007.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2008.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2009.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2010.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2011.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2012.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2013.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2014.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2015.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.2016.171019.nc - - - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1958.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1959.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1960.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1961.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1962.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1963.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1964.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1965.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1966.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1967.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1968.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1969.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1970.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1971.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1972.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1973.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1974.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1975.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1976.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1977.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1978.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1979.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1980.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1981.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1982.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1983.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1984.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1985.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1986.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1987.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1988.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1989.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1990.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1991.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1992.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1993.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1994.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1995.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1996.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1997.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1998.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.1999.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2000.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2001.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2002.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2003.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2004.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2005.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2006.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2007.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2008.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2009.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2010.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2011.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2012.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2013.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2014.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2015.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.2016.171019.nc - - - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1958.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1959.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1960.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1961.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1962.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1963.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1964.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1965.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1966.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1967.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1968.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1969.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1970.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1971.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1972.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1973.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1974.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1975.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1976.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1977.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1978.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1979.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1980.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1981.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1982.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1983.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1984.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1985.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1986.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1987.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1988.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1989.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1990.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1991.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1992.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1993.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1994.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1995.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1996.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1997.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1998.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.1999.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2000.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2001.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2002.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2003.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2004.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2005.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2006.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2007.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2008.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2009.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2010.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2011.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2012.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2013.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2014.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2015.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.2016.171019.nc - - - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1958.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1959.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1960.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1961.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1962.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1963.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1964.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1965.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1966.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1967.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1968.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1969.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1970.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1971.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1972.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1973.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1974.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1975.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1976.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1977.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1978.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1979.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1980.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1981.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1982.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1983.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1984.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1985.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1986.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1987.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1988.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1989.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1990.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1991.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1992.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1993.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1994.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1995.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1996.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1997.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1998.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.1999.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2000.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2001.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2002.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2003.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2004.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2005.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2006.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2007.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2008.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2009.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2010.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2011.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2012.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2013.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2014.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2015.171019.nc - $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.2016.171019.nc - - - $DIN_LOC_ROOT/atm/datm7/CORE2/CORE2.t_10.ArcFactor.T62.1997-2004.nc - - - - - - $DIN_LOC_ROOT/atm/datm7/ERA5/ERA5.TL639.2019.01.200618.nc - $DIN_LOC_ROOT/atm/datm7/ERA5/ERA5.TL639.2019.02.200618.nc - $DIN_LOC_ROOT/atm/datm7/ERA5/ERA5.TL639.2019.03.200618.nc - $DIN_LOC_ROOT/atm/datm7/ERA5/ERA5.TL639.2019.04.200618.nc - $DIN_LOC_ROOT/atm/datm7/ERA5/ERA5.TL639.2019.05.200618.nc - $DIN_LOC_ROOT/atm/datm7/ERA5/ERA5.TL639.2019.06.200618.nc - $DIN_LOC_ROOT/atm/datm7/ERA5/ERA5.TL639.2019.07.200618.nc - $DIN_LOC_ROOT/atm/datm7/ERA5/ERA5.TL639.2019.08.200618.nc - $DIN_LOC_ROOT/atm/datm7/ERA5/ERA5.TL639.2019.09.200618.nc - $DIN_LOC_ROOT/atm/datm7/ERA5/ERA5.TL639.2019.10.200618.nc - $DIN_LOC_ROOT/atm/datm7/ERA5/ERA5.TL639.2019.11.200618.nc - $DIN_LOC_ROOT/atm/datm7/ERA5/ERA5.TL639.2019.12.200618.nc - - - - - - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_global_simyr_1750-2014_CMIP6_c180929.nc - - - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bands_simyr_1750-2015_CMIP6_c180929.nc - - - fco2_datm_global_ssp585_simyr_1750-2020_CMIP6_c200324.nc - - - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP1-1.9_simyr_2014-2500_CMIP6_c190514.nc - - - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP1-2.6__simyr_2014-2500_CMIP6_c190506.nc - - - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP2-4.5__simyr_2014-2500_CMIP6_c190506.nc - - - $DIN_LOC_ROOT/atm/datm7/CO2/co2_datm_lat-bandsSSP3-7.0__simyr_2014-2500_CMIP6_c190506.nc - - - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP4-3.4_simyr_2014-2500_CMIP6_c190514.nc - - - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP4-6.0__simyr_2014-2500_CMIP6_c190506.nc - - - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP5-3.4__simyr_2014-2500_CMIP6_c190506.nc - - - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP5-8.5__simyr_2014-2500_CMIP6_c190506.nc - - - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP1-1.9_simyr_2014-2501_CMIP6_c190514.nc - - - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP1-2.6__simyr_2014-2501_CMIP6_c190506.nc - - - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP2-4.5__simyr_2014-2501_CMIP6_c190506.nc - - - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP3-7.0__simyr_2014-2501_CMIP6_c190506.nc - - - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP4-3.4_simyr_2014-2501_CMIP6_c190514.nc - - - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP4-6.0__simyr_2014-2501_CMIP6_c190506.nc - - - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP5-3.4__simyr_2014-2501_CMIP6_c190506.nc - - - $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP5-8.5__simyr_2014-2501_CMIP6_c190506.nc - - - - - - $DIN_LOC_ROOT/atm/datm7/bias_correction/precip/gpcp/qian/bias_correction.Prec.%y.nc - - - $DIN_LOC_ROOT/atm/datm7/clm_output/cruncep_precip_1deg/gpcp_1deg_bias_correction/bias_correction.Prec.%y.nc - - - $DIN_LOC_ROOT/atm/datm7/bias_correction/precip/cmap/cruncep/bias_correction.Prec.%y.nc - - - - - - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc/domain.permafrostRCN_P2_ESMFmesh_120620.nc - - - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.pr.ccsm4.rcp45.2006-2300.nc - - - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.tas.ccsm4.rcp45.2006-2300.nc - - - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.ps.ccsm4.rcp45.2006-2300.nc - - - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.huss.ccsm4.rcp45.2006-2300.nc - - - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.uas.ccsm4.rcp45.2006-2300.nc - - - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.vas.ccsm4.rcp45.2006-2300.nc - - - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.rsds.ccsm4.rcp45.2006-2300.nc - - - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.rlds.ccsm4.rcp45.2006-2300.nc - - - - - - $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x1d.%ym.nc - - - $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc - - - $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc - - - $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc - - - $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc - - - $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc - - - $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc - - - $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc - - - $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc - - - $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerodep_clm_SSP126_b.e21.BSSP126cmip6.f09_g17.CMIP6-SSP1-2.6.001_2014-2101_monthly_0.9x1.25_c190523.nc - - - $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerodep_clm_SSP245_b.e21.BWSSP245cmip6.f09_g17.CMIP6-SSP2-4.5-WACCM.001_2014-2101_monthly_0.9x1.25_c190401.nc - - - $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerodep_clm_SSP370_b.e21.BWSSP370cmip6.f09_g17.CMIP6-SSP3-7.0-WACCM.001_2014-2101_monthly_0.9x1.25_c190402.nc - - - null - - - $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerodep_clm_SSP585_b.e21.BSSP585cmip6.f09_g17.CMIP6-SSP5-8.5.001_2014-2101_monthly_0.9x1.25_c190419.nc - - - - - - $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x3h.%ym.nc - - - $DIN_LOC_ROOT/atm/datm7/topo_forcing/topodata_0.9x1.25_USGS_070110_stream_c151201.nc - - - - - - char - streams - streams_file - Stream data variable name(s). - - null - - - - - ZBOT Sa_z - TBOT Sa_tbot - RH Sa_rh - WIND Sa_wind - PSRF Sa_pbot - PRECTmms Faxa_precn - FSDS Faxa_swdn - FSDSdir Faxa_swdndr - FSDSdif Faxa_swdndf - FLDS Faxa_lwdn - - - - - - a2x1hi_Faxa_swndr Faxa_swndr - a2x1hi_Faxa_swvdr Faxa_swvdr - a2x1hi_Faxa_swndf Faxa_swndf - a2x1hi_Faxa_swvdf Faxa_swvdf - - - a2x3h_Faxa_rainc Faxa_rainc - a2x3h_Faxa_rainl Faxa_rainl - a2x3h_Faxa_snowc Faxa_snowc - a2x3h_Faxa_snowl Faxa_snowl - a2x3h_Faxa_lwdn Faxa_lwdn - - - a2x3h_Sa_z Sa_z - a2x3h_Sa_tbot Sa_tbot - a2x3h_Sa_ptem Sa_ptem - a2x3h_Sa_shum Sa_shum - a2x3h_Sa_pbot Sa_pbot - a2x3h_Sa_dens Sa_dens - a2x3h_Sa_pslv Sa_pslv - a2x3h_Sa_co2diag Sa_co2diag - a2x3h_Sa_co2prog Sa_co2prog - - - a2x1h_Sa_u Sa_u - a2x1h_Sa_v Sa_v - - - - - - FSDS Faxa_swdn - - - PRECTmms Faxa_precn - - - TBOT Sa_tbot - WIND Sa_wind - QBOT Sa_shum - PSRF Sa_pbot - - - FSDS Faxaswdn - - - PRECTmms Faxa_precn - - - TBOT Sa_tbot - WIND Sa_wind - QBOT Sa_shum - PSRF Sa_pbot - - - - - - FSDS Faxa_swdn - - - PRECTmms Faxa_precn - - - TBOT Sa_tbot - WIND Sa_wind - QBOT Sa_shum - PSRF Sa_pbot - - - - - - FSDS Faxa_swdn - - - PRECTmms Faxa_precn - - - TBOT Sa_tbot - WIND Sa_wind - QBOT Sa_shum - PSRF Sa_pbot - FLDS Faxa_lwdn - - - - - - FSDS Faxa_swdn - - - PRECTmms Faxa_precn - - - TBOT Sa_tbot - WIND Sa_wind - QBOT Sa_shum - PSRF Sa_pbot - FLDS Faxa_lwdn - - - - - - lwdn Faxa_lwdn - swdn Faxa_swdn - swup Faxa_swup - - - prc Faxa_prec - - - dn10 Sa_dens - slp_ Sa_pslv - q_10 Sa_shum - t_10 Sa_tbot - u_10 Sa_u - v_10 Sa_v - - - - - - dn10 Sa_dens - - - slp_ Sa_pslv - - - t3_5 Sa_tbot - - - u3_5 Sa_u - - - v3_5 Sa_v - - - dn10 Sa_dens - - - q_10 Sa_shum - - - slp_ Sa_pslv - - - t_10 Sa_tbot - - - u_10 Sa_u - - - v_10 Sa_v - - - prec Faxa_prec - - - lwdn Faxa_lwdn - - - swdn Faxa_swdn - - - swup Faxa_swup - - - q3_5 Faxa_shum - - - prc Faxa_prec - - - lwdn Faxa_lwdn - - - swdn Faxa_swdn - - - swup Faxa_swup - - - TarcFactor tarcf - - - - - - q_10 Sa_shum - - - slp Sa_pslv - - - t_10 Sa_tbot - - - u_10 Sa_u - - - v_10 Sa_v - - - prec Faxa_prec - - - lwdn Faxa_lwdn - - - swdn Faxa_swdn - - - TarcFactor tarcf - - - - - - u10 Sa_u - v10 Sa_v - t2m Sa_tbot - skt Sa_tskn - d2m Sa_tdew - msl Sa_pslv - sp Sa_pbot - tp Faxa_rain - cp Faxa_rainc - lsp Faxa_rainl - csf Faxa_snowc - lsf Faxa_snowl - ssrd Faxa_swdn - ssr Faxa_swnet - strd Faxa_lwdn - str Faxa_lwnet - aluvp Faxa_swvdr - aluvd Faxa_swvdf - alnip Faxa_swndr - alnid Faxa_swndf - sshf Faxa_sen - slhf Faxa_lat - ewss Faxa_taux - nsss Faxa_tauy - - - - - - CO2 Sa_co2diag - - - CO2 Sa_co2diag - - - CO2 Sa_co2diag - - - - - - BC_PREC Faxa_precsf - - - BC_PREC Faxa_precsf - - - - - - tas Sa_tbot_af - - - ps Sa_pbot_af - - - huss Sa_shum_af - - - uas Sa_u_af - - - vas Sa_v_af - - - pr Faxa_prec_af - - - rsds Faxa_swdn_af - - - rlds Faxa_lwdn_af - - - - - - a2x1d_Faxa_bcphiwet Faxa_bcphiwet - a2x1d_Faxa_bcphodry Faxa_bcphodry - a2x1d_Faxa_bcphidry Faxa_bcphidry - a2x1d_Faxa_ocphiwet Faxa_ocphiwet - a2x1d_Faxa_ocphidry Faxa_ocphidry - a2x1d_Faxa_ocphodry Faxa_ocphodry - a2x1d_Faxa_dstwet1 Faxa_dstwet1 - a2x1d_Faxa_dstdry1 Faxa_dstdry1 - a2x1d_Faxa_dstwet2 Faxa_dstwet2 - a2x1d_Faxa_dstdry2 Faxa_dstdry2 - a2x1d_Faxa_dstwet3 Faxa_dstwet3 - a2x1d_Faxa_dstdry3 Faxa_dstdry3 - a2x1d_Faxa_dstwet4 Faxa_dstwet4 - a2x1d_Faxa_dstdry4 Faxa_dstdry4 - - - BCDEPWET Faxa_bcphiwet - BCPHODRY Faxa_bcphodry - BCPHIDRY Faxa_bcphidry - OCDEPWET Faxa_ocphiwet - OCPHIDRY Faxa_ocphidry - OCPHODRY Faxa_ocphodry - DSTX01WD Faxa_dstwet1 - DSTX01DD Faxa_dstdry1 - DSTX02WD Faxa_dstwet2 - DSTX02DD Faxa_dstdry2 - DSTX03WD Faxa_dstwet3 - DSTX03DD Faxa_dstdry3 - DSTX04WD Faxa_dstwet4 - DSTX04DD Faxa_dstdry4 - - - - - - a2x3h_Sa_topo Sa_topo - - - TOPO Sa_topo - - - - - - - integer - streams - streams_file - Simulation year to align stream to. - - -999 - $DATM_CLMNCEP_YR_ALIGN - $DATM_CPLHIST_YR_ALIGN - $DATM_CLMNCEP_YR_ALIGN - $DATM_CLMNCEP_YR_ALIGN - $DATM_CLMNCEP_YR_ALIGN - $DATM_CLMNCEP_YR_ALIGN - $DATM_CLMNCEP_YR_ALIGN - 1 - 1 - 1 - 1 - 1900 - 1850 - 2015 - 1979 - 1979 - 2006 - $DATM_CPLHIST_YR_ALIGN - 1 - 1 - 1 - 1849 - 2015 - 1 - $DATM_CPLHIST_YR_ALIGN - - - - - integer - streams - streams_file - First year of stream. - - -999 - 1993 - 1992 - 0001 - $DATM_CPLHIST_YR_START - 2000 - $DATM_CLMNCEP_YR_START - $DATM_CLMNCEP_YR_START - $DATM_CLMNCEP_YR_START - $DATM_CLMNCEP_YR_START - 1 - 2010 - 2010 - 2010 - 2010 - 2010 - 2010 - 2010 - 2010 - 2010 - 2010 - 1948 - 1948 - 1948 - 1948 - 1948 - 1948 - 1948 - 1948 - 1948 - 1948 - 1948 - 1958 - 1958 - 1958 - 1958 - 1958 - 1958 - 1958 - 1958 - 1958 - 2019 - 1850 - 2015 - 2006 - $DATM_CPLHIST_YR_START - 1850 - 2000 - 2010 - 1849 - 2015 - 1 - $DATM_CPLHIST_YR_START - - - - - integer - streams - streams_file - Last year of stream. - - -999 - 1993 - 1992 - 0002 - $DATM_CPLHIST_YR_END - 2004 - $DATM_CLMNCEP_YR_END - $DATM_CLMNCEP_YR_END - $DATM_CLMNCEP_YR_END - $DATM_CLMNCEP_YR_END - 1 - 2011 - 2011 - 2011 - 2011 - 2011 - 2011 - 2011 - 2011 - 2011 - 2011 - 2009 - 2009 - 2009 - 2009 - 2009 - 2009 - 2009 - 2009 - 2009 - 2009 - 2009 - 2016 - 2016 - 2016 - 2016 - 2016 - 2016 - 2016 - 2016 - 2016 - 2019 - 2014 - 2500 - 2012 - 2010 - 2300 - $DATM_CPLHIST_YR_END - 1850 - 2000 - 2010 - 2014 - 2101 - 1 - $DATM_CPLHIST_YR_END - - - - - integer - streams - streams_file - Stream offset. - - 0 - -5400 - 2700 - 900 - 900 - 900 - 0 - 0 - - - - - char(30) - streams - streams_file - redist,bilinear,nn - - array (up to 30 elements) of mapping algorithms associated with the array of streams. - valid values: redist,bilinear - - - bilinear - none - redist - redist - redist - none - nn - - - - - char(30) - streams - streams_file - coszen,nearest,linear,lower,upper - - array (up to 30 elements) of time interpolation options associated with the array of - streams. - valid values: lower,upper,nearest,linear,coszen - lower = Use lower time-value - upper = Use upper time-value - nearest = Use the nearest time-value - linear = Linearly interpolate between the two time-values - coszen = Scale according to the cosine of the solar zenith angle (for solar) - - - linear - nearest - nearest - nearest - linear - linear - nearest - nearest - coszen - nearest - coszen - nearest - coszen - nearest - coszen - nearest - coszen - nearest - coszen - nearest - nearest - nearest - nearest - nearest - nearest - nearest - nearest - nearest - nearest - nearest - - lower - coszen - - - - - char(30) - streams - streams_file - extend,cycle,limit - - array of time axis modes associated with the array of streams for - handling data outside the specified stream time axis. - valid options are to cycle the data based on the first, last, and - align settings associated with the stream dataset, to extend the first - and last valid value indefinitely, or to limit the interpolated data - to fall only between the least and greatest valid value of the time array. - valid values: cycle,extend,limit - - - cycle - extend - extend - extend - - - - - char(30) - streams - streams_file - single,full_file - - array (up to 30 elements) of reading mode associated with the array of - streams. specifies the mode of reading temporal stream dataset. - valid options are "single" (read temporal dataset one at a time) or - "full_file" (read all entires of temporal dataset in a given netcdf file) - valid values: single,full_file - - - single - - - - - real(30) - streams - streams_file - - array (up to 30 elements) of delta time ratio limits placed on the - time interpolation associated with the array of streams. this real - value causes the model to stop if the ratio of the running maximum - delta time divided by the minimum delta time is greater than the - dtlimit for that stream. for instance, with daily data, the delta - time should be exactly one day throughout the dataset and the computed - maximum divided by minimum delta time should always be 1.0. for - monthly data, the delta time should be between 28 and 31 days and the - maximum ratio should be about 1.1. the running value of the delta - time is computed as data is read and any wraparound or cycling is also - included. this input helps trap missing data or errors in cycling. - to turn off trapping, set the value to 1.0e30 or something similar. - - - 1.5 - 1.e30 - 1.e30 - 3.0 - 3.0 - 3.0 - 3.0 - 3.0 - 3.0 - 1.e30 - 1.e30 - 1.e30 - - - - - char - streams - streams_file - - list of paired colon delimited field names that should be treated as - vectors when carrying out spatial interpolation. unlike other - character arrays in this namelist, this array is completely decoupled - from the list of streams. this is a list of vector pairs that span - all input streams where different fields of the vector pair could - appear in different streams. - for example, vectors = 'u:v','taux:tauy'. - - - null - u:v - u:v - u:v - u:v,taux:tauy - - - - - char(30) - streams - streams_file - - character array (up to 30 elements) of stream input files. this - string is actually parsed by a stream method and so the format is - specified by the stream module. this string consists of a - "stream_input_filename year_align year_first year_last". the - stream_input_filename is a stream text input file and the format and - options are described elsewhere. year_align, year_first, and - year_last provide information about the time axis of the file and how - to relate the input time axis to the model time axis. - - - - - - - - - - char datm @@ -2703,7 +182,7 @@ $ATM_NY - + char datm datm_nml diff --git a/datm/cime_config/stream_definition_datm.xml b/datm/cime_config/stream_definition_datm.xml new file mode 100644 index 000000000..81ec9766e --- /dev/null +++ b/datm/cime_config/stream_definition_datm.xml @@ -0,0 +1,2734 @@ + + + + + + + + + + + + + + + + + $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.GSWP3.0.5d.v1.c170516/clmforc.GSWP3.c2011.0.5x0.5.TPQWL.SCRIP.210520_ESMFmesh.nc + + + $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.GSWP3.0.5d.v1.c170516/Solar/clmforc.GSWP3.c2011.0.5x0.5.Solr.%ym.nc + + + FSDS Faxa_swdn + + null + $DATM_CLMNCEP_YR_ALIGN + $DATM_CLMNCEP_YR_START + $DATM_CLMNCEP_YR_END + 0 + bilinear + linear + null + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.GSWP3.0.5d.v1.c170516/clmforc.GSWP3.c2011.0.5x0.5.TPQWL.SCRIP.210520_ESMFmesh.nc + + + $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.GSWP3.0.5d.v1.c170516/Precip/clmforc.GSWP3.c2011.0.5x0.5.Prec.%ym.nc + + + PRECTmms Faxa_precn + + null + $DATM_CLMNCEP_YR_ALIGN + $DATM_CLMNCEP_YR_START + $DATM_CLMNCEP_YR_END + 0 + bilinear + null + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.GSWP3.0.5d.v1.c170516/clmforc.GSWP3.c2011.0.5x0.5.TPQWL.SCRIP.210520_ESMFmesh.nc + + + $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.GSWP3.0.5d.v1.c170516/TPHWL/clmforc.GSWP3.c2011.0.5x0.5.TPQWL.%ym.nc + + + TBOT Sa_tbot + WIND Sa_wind + QBOT Sa_shum + PSRF Sa_pbot + FLDS Faxa_lwdn + + null + $DATM_CLMNCEP_YR_ALIGN + $DATM_CLMNCEP_YR_START + $DATM_CLMNCEP_YR_END + 0 + bilinear + null + linear + cycle + 1.5 + single + + + + + + + + + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.cruncep_qianFill.0.5d.v7.c160715/clmforc.cruncep.V7.c2016.0.5d.ESMFmesh_260520.nc + + + $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.cruncep_qianFill.0.5d.v7.c160715/Solar6Hrly/clmforc.cruncep.V7.c2016.0.5d.Solr.%ym.nc + + + FSDS Faxa_swdn + + null + $DATM_CLMNCEP_YR_ALIGN + $DATM_CLMNCEP_YR_START + $DATM_CLMNCEP_YR_END + 0 + bilinear + null + coszen + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.cruncep_qianFill.0.5d.v7.c160715/clmforc.cruncep.V7.c2016.0.5d.ESMFmesh_260520.nc + + + null + + + $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.cruncep_qianFill.0.5d.v7.c160715/Precip6Hrly/clmforc.cruncep.V7.c2016.0.5d.Prec.%ym.nc + + + PRECTmms Faxa_precn + + $DATM_CLMNCEP_YR_ALIGN + $DATM_CLMNCEP_YR_START + $DATM_CLMNCEP_YR_END + 0 + coszen + null + nearest + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.cruncep_qianFill.0.5d.v7.c160715/clmforc.cruncep.V7.c2016.0.5d.ESMFmesh_260520.nc + + + null + + + $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.cruncep_qianFill.0.5d.v7.c160715/TPHWL6Hrly/clmforc.cruncep.V7.c2016.0.5d.TPQWL.%ym.nc + + + TBOT Sa_tbot + WIND Sa_wind + QBOT Sa_shum + PSRF Sa_pbot + + $DATM_CLMNCEP_YR_ALIGN + $DATM_CLMNCEP_YR_START + $DATM_CLMNCEP_YR_END + 0 + bilinear + null + linear + cycle + 1.5 + single + + + + + + + + + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/clmforc.Qian.c2006.T62.ESMFmesh_120620.nc + + + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/Solar6Hrly/clmforc.Qian.c2006.T62.Solr.%ym.nc + + + FSDS Faxa_swdn + + null + $DATM_CLMNCEP_YR_ALIGN + $DATM_CLMNCEP_YR_START + $DATM_CLMNCEP_YR_END + 0 + bilinear + null + coszen + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/clmforc.Qian.c2006.T62.ESMFmesh_120620.nc + + + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/Precip6Hrly/clmforc.Qian.c2006.T62.Prec.%ym.nc + + + PRECTmms Faxa_precn + + null + $DATM_CLMNCEP_YR_ALIGN + $DATM_CLMNCEP_YR_START + $DATM_CLMNCEP_YR_END + 0 + bilinear + null + nearest + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/clmforc.Qian.c2006.T62.ESMFmesh_120620.nc + + + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/TmpPrsHumWnd3Hrly/clmforc.Qian.c2006.T62.TPQW.%ym.nc + + + TBOT Sa_tbot + WIND Sa_wind + QBOT Sa_shum + PSRF Sa_pbot + + null + $DATM_CLMNCEP_YR_ALIGN + $DATM_CLMNCEP_YR_START + $DATM_CLMNCEP_YR_END + 0 + bilinear + null + linear + cycle + 1.5 + single + + + + + + + + + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/clmforc.Qian.c2006.T62.ESMFmesh_120620.nc + + + $DIN_LOC_ROOT/atm/datm7/atm_forcing_iso.datm7.Qian.T62.c080727/Solar6Hrly/clmforc.Qian.c2006.T62.Solr.%ym.nc + + + FSDS Faxaswdn + + null + $DATM_CLMNCEP_YR_ALIGN + 2000 + 2004 + 0 + bilinear + null + coszen + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/clmforc.Qian.c2006.T62.ESMFmesh_120620.nc + + + $DIN_LOC_ROOT/atm/datm7/atm_forcing_iso.datm7.Qian.T62.c080727/Precip6Hrly/clmforc.Qian.c2006.T62.Prec.%ym.nc + + + PRECTmms Faxa_precn + + null + $DATM_CLMNCEP_YR_ALIGN + 2000 + 2004 + 0 + bilinear + null + nearest + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/clmforc.Qian.c2006.T62.ESMFmesh_120620.nc + + + $DIN_LOC_ROOT/atm/datm7/atm_forcing_iso.datm7.Qian.T62.c080727/TmpPrsHumWnd3Hrly/clmforc.Qian.c2006.T62.TPQW.%ym.nc + + + TBOT Sa_tbot + WIND Sa_wind + QBOT Sa_shum + PSRF Sa_pbot + + null + $DATM_CLMNCEP_YR_ALIGN + 2000 + 2004 + 0 + bilinear + null + linear + cycle + 1.5 + single + + + + + + + + + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.NLDAS2.0.125d.v1/ctsmforc.NLDAS2.0.125d.v1.ESMFmesh_120620.nc + + + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.NLDAS2.0.125d.v1/Solar/ctsmforc.NLDAS2.0.125d.v1.Solr.%ym.nc + + + FSDS Faxa_swdn + + null + $DATM_CLMNCEP_YR_ALIGN + $DATM_CLMNCEP_YR_START + $DATM_CLMNCEP_YR_END + 0 + bilinear + null + coszen + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.NLDAS2.0.125d.v1/ctsmforc.NLDAS2.0.125d.v1.ESMFmesh_120620.nc + + + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.NLDAS2.0.125d.v1/Precip/ctsmforc.NLDAS2.0.125d.v1.Prec.%ym.nc + + + PRECTmms Faxa_precn + + null + $DATM_CLMNCEP_YR_ALIGN + $DATM_CLMNCEP_YR_START + $DATM_CLMNCEP_YR_END + 0 + bilinear + null + nearest + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.NLDAS2.0.125d.v1/ctsmforc.NLDAS2.0.125d.v1.ESMFmesh_120620.nc + + + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.NLDAS2.0.125d.v1/TPQWL/ctsmforc.NLDAS2.0.125d.v1.TPQWL.%ym.nc + + + TBOT Sa_tbot + WIND Sa_wind + QBOT Sa_shum + PSRF Sa_pbot + FLDS Faxa_lwdn + + null + $DATM_CLMNCEP_YR_ALIGN + $DATM_CLMNCEP_YR_START + $DATM_CLMNCEP_YR_END + 0 + bilinear + null + linear + cycle + 1.5 + single + + + + + + + + + none + + + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/mexicocityMEX.c080124/clm1pt-1993-12.nc + + + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/vancouverCAN.c080124/clm1pt-1992-08.nc + + + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0001-08.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0001-09.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0001-10.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0001-11.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0001-12.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-01.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-02.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-03.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-04.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-05.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-06.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-07.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-08.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-09.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-10.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0002-11.nc + + + ZBOT Sa_z + TBOT Sa_tbot + RH Sa_rh + WIND Sa_wind + PSRF Sa_pbot + PRECTmms Faxa_precn + FSDS Faxa_swdn + FSDSdir Faxa_swdndr + FSDSdif Faxa_swdndf + FLDS Faxa_lwdn + + null + $DATM_CLMNCEP_YR_ALIGN + 1993 + 1992 + 0001 + 1993 + 1992 + 0002 + 0 + none + null + nearest + extend + 1.e30 + single + + + + + + + + + + + + $DIN_LOC_ROOT/atm/datm7/bias_correction/precip/gpcp/qian/bias_correction.Prec.%y.nc + + + BC_PREC Faxa_precsf + + null + 1979 + 1979 + 2004 + 0 + bilinear + null + linear + nearest + 1.5 + single + + + + + + + + $DIN_LOC_ROOT/atm/datm7/clm_output/cruncep_precip_1deg/gpcp_1deg_bias_correction/bias_correction.Prec.%y.nc + + + BC_PREC Faxa_precsf + + null + 1979 + 1979 + 2012 + 0 + bilinear + null + nearest + cycle + 1.5 + single + + + + + + + + $DIN_LOC_ROOT/atm/datm7/bias_correction/precip/cmap/cruncep/bias_correction.Prec.%y.nc + + + BC_PREC Faxa_precsf + + null + 1979 + 1979 + 2010 + 0 + bilinear + null + nearest + cycle + 1.5 + single + + + + + + + + + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc/domain.permafrostRCN_P2_ESMFmesh_120620.nc + + + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.pr.ccsm4.rcp45.2006-2300.nc + + + pr Faxa_prec_af + + null + 2006 + 2006 + 2300 + 0 + bilinear + null + nearest + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc/domain.permafrostRCN_P2_ESMFmesh_120620.nc + + + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.tas.ccsm4.rcp45.2006-2300.nc + + + tas Sa_tbot_af + + null + 2006 + 2006 + 2300 + 0 + bilinear + null + nearest + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc/domain.permafrostRCN_P2_ESMFmesh_120620.nc + + + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.ps.ccsm4.rcp45.2006-2300.nc + + + ps Sa_pbot_af + + null + 2006 + 2006 + 2300 + 0 + bilinear + null + nearest + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc/domain.permafrostRCN_P2_ESMFmesh_120620.nc + + + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.huss.ccsm4.rcp45.2006-2300.nc + + + huss Sa_shum_af + + null + 2006 + 2300 + 2300 + 0 + bilinear + null + nearest + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc/domain.permafrostRCN_P2_ESMFmesh_120620.nc + + + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.uas.ccsm4.rcp45.2006-2300.nc + + + uas Sa_u_af + + null + 2006 + 2006 + 2300 + 0 + bilinear + null + nearest + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc/domain.permafrostRCN_P2_ESMFmesh_120620.nc + + + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.vas.ccsm4.rcp45.2006-2300.nc + + + vas Sa_v_af + + null + 2006 + 2006 + 2300 + 0 + bilinear + null + nearest + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc/domain.permafrostRCN_P2_ESMFmesh_120620.nc + + + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.rsds.ccsm4.rcp45.2006-2300.nc + + + rsds Faxa_swdn_af + + null + 2006 + 2006 + 2300 + 0 + bilinear + null + nearest + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc/domain.permafrostRCN_P2_ESMFmesh_120620.nc + + + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.rlds.ccsm4.rcp45.2006-2300.nc + + + rlds Faxa_lwdn_af + + null + 2006 + 2006 + 2300 + 0 + bilinear + null + nearest + cycle + 1.5 + single + + + + + + + + + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + + + $DIN_LOC_ROOT/atm/datm7/NYF/nyf.giss.T62.051007.nc + + + lwdn Faxa_lwdn + swdn Faxa_swdn + swup Faxa_swup + + null + 1 + 1 + 1 + 0 + bilinear + u:v + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + + + $DIN_LOC_ROOT/atm/datm7/NYF/nyf.gxgxs.T62.051007.nc + + + prc Faxa_prec + + null + 1 + 1 + 1 + 0 + bilinear + u:v + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + + + $DIN_LOC_ROOT/atm/datm7/NYF/nyf.ncep.T62.050923.nc + + + dn10 Sa_dens + slp_ Sa_pslv + q_10 Sa_shum + t_10 Sa_tbot + u_10 Sa_u + v_10 Sa_v + + null + 1 + 1 + 1 + 0 + bilinear + u:v + linear + cycle + 1.5 + single + + + + + + + + + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + + + $DIN_LOC_ROOT/ocn/iaf/ncep.SOFS.2010.nc + + v + dn10 Sa_dens + + null + 1 + 2010 + 2011 + 0 + bilinear + u:v + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + + + $DIN_LOC_ROOT/ocn/iaf/ncep.SOFS.2010.nc + + + slp_ Sa_pslv + + null + 1 + 2010 + 2011 + 0 + bilinear + u:v + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + + + $DIN_LOC_ROOT/ocn/iaf/SOFS.daily.03-09.2010.nc + + + prec Faxa_prec + + null + 1 + 2010 + 2011 + 0 + bilinear + u:v + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + + + $DIN_LOC_ROOT/ocn/iaf/SOFS.daily.03-09.2010.nc + + + lwdn Faxa_lwdn + + null + 1 + 2010 + 2011 + 0 + bilinear + u:v + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + + + $DIN_LOC_ROOT/ocn/iaf/SOFS.daily.03-09.2010.nc + + + swdn Faxa_swdn + + null + 1 + 2010 + 2011 + 0 + bilinear + u:v + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + + + $DIN_LOC_ROOT/ocn/iaf/SOFS.daily.03-09.2010.nc + + + swup Faxa_swup + + null + 1 + 2010 + 2011 + 0 + bilinear + u:v + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + + + $DIN_LOC_ROOT/ocn/iaf/SOFS.6hour.03-09.2010.nc + + + q3_5 Faxa_shum + + null + 1 + 2010 + 2011 + 0 + bilinear + u:v + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + + + $DIN_LOC_ROOT/ocn/iaf/SOFS.6hour.03-09.2010.nc + + + t3_5 Sa_tbot + + null + 1 + 2010 + 2011 + 0 + bilinear + u:v + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + + + $DIN_LOC_ROOT/ocn/iaf/SOFS.6hour.03-09.2010.nc + + + u3_5 Sa_u + + null + 1 + 2010 + 2011 + 0 + bilinear + u:v + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + + + $DIN_LOC_ROOT/ocn/iaf/SOFS.6hour.03-09.2010.nc + + + v3_5 Sa_v + + null + 1 + 2010 + 2011 + 0 + bilinear + u:v + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + + + $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.%y.nc + $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.%y.20120412.nc + + + prc Faxa_prec + + null + 1 + 1948 + 2009 + 0 + bilinear + u:v + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + + + $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.%y.nc + $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.%y.20120412.nc + + + lwdn Faxa_lwdn + + null + 1 + 1948 + 2009 + 0 + bilinear + u:v + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + + + $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.%y.nc + $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.%y.20120412.nc + + + swdn Faxa_swdn + + null + 1 + 1948 + 2009 + 0 + bilinear + u:v + coszen + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + + + $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.%y.nc + $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.%y.20120412.nc + + + swup Faxa_swup + + null + 1 + 1948 + 2009 + + bilinear + u:v + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + + + $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.%y.nc + $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.%y.20120414.nc + $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.%y.nc + $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.%y.20120412.nc + + + dn10 Sa_dens + + null + 1 + 1948 + 2009 + 0 + bilinear + u:v + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + + + $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.%y.nc + $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.2005.20120414.nc + $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.%y.nc + $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.%y.20120412.nc + + + q_10 Sa_shum + + null + 1 + 1948 + 2009 + 0 + bilinear + u:v + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + + + $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.%y.nc + $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.2005.20120414.nc + $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.%y.nc + $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.%y.20120412.nc + + + slp_ Sa_pslv + + null + 1 + 1948 + 2009 + 0 + bilinear + u:v + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + + + $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.%y.nc + $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.2005.20120414.nc + $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.%y.nc + $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.%y.20120412.nc + + + t_10 Sa_tbot + + null + 1 + 1948 + 2009 + 0 + bilinear + u:v + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + + + $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.%y.nc + $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.2005.20120414.nc + $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.%y.nc + $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.%y.20120412.nc + + + u_10 Sa_u + + null + 1 + 1948 + 2009 + 0 + bilinear + u:v + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + + + $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.%y.nc + $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.2005.20120414.nc + $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.%y.nc + $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.%y.20120412.nc + + + v_10 Sa_v + + null + 1 + 1948 + 2009 + 0 + bilinear + u:v + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + + + $DIN_LOC_ROOT/atm/datm7/CORE2/CORE2.t_10.ArcFactor.T62.1997-2004.nc + + + TarcFactor tarcf + + null + 1 + 1948 + 2009 + 0 + bilinear + u:v + linear + cycle + 1.e30 + single + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $DIN_LOC_ROOT/share/meshes/TL319_151007_ESMFmesh.nc + + + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.%y.171019.nc + + + prec Faxa_prec + + null + 1 + 1958 + 2016 + 0 + bilinear + u:v + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/TL319_151007_ESMFmesh.nc + + + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.%y.171019.nc + + + lwdn Faxa_lwdn + + null + 1 + 1958 + 2016 + 0 + bilinear + u:v + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/TL319_151007_ESMFmesh.nc + + + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.%y.171019.nc + + + swdn Faxa_swdn + + null + 1 + 1958 + 2016 + -5400 + bilinear + u:v + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/TL319_151007_ESMFmesh.nc + + + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.%y.171019.nc + + + q_10 Sa_shum + + null + 1 + 1958 + 2016 + 0 + bilinear + u:v + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/TL319_151007_ESMFmesh.nc + + + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.%y.171019.nc + + + slp Sa_pslv + + null + 1 + 1958 + 2016 + 0 + bilinear + u:v + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/TL319_151007_ESMFmesh.nc + + + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.%y.171019.nc + + + t_10 Sa_tbot + + null + 1 + 1958 + 2016 + 0 + bilinear + u:v + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/TL319_151007_ESMFmesh.nc + + + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.%y.171019.nc + + + u_10 Sa_u + + null + 1 + 1958 + 2016 + 0 + bilinear + u:v + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/TL319_151007_ESMFmesh.nc + + + $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.%y.171019.nc + + + v_10 Sa_v + + null + 1 + 1958 + 2016 + 0 + bilinear + u:v + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + + + $DIN_LOC_ROOT/atm/datm7/CORE2/CORE2.t_10.ArcFactor.T62.1997-2004.nc + + + TarcFactor tarcf + + null + 1 + 1958 + 2016 + 0 + bilinear + u:v + linear + cycle + 1.e30 + single + + + + + + + + + $DIN_LOC_ROOT/share/meshes/TL639_200618_ESMFmesh.nc + + + $DIN_LOC_ROOT/atm/datm7/ERA5/ERA5.TL639.2019.01.200618.nc + $DIN_LOC_ROOT/atm/datm7/ERA5/ERA5.TL639.2019.02.200618.nc + $DIN_LOC_ROOT/atm/datm7/ERA5/ERA5.TL639.2019.03.200618.nc + $DIN_LOC_ROOT/atm/datm7/ERA5/ERA5.TL639.2019.04.200618.nc + $DIN_LOC_ROOT/atm/datm7/ERA5/ERA5.TL639.2019.05.200618.nc + $DIN_LOC_ROOT/atm/datm7/ERA5/ERA5.TL639.2019.06.200618.nc + $DIN_LOC_ROOT/atm/datm7/ERA5/ERA5.TL639.2019.07.200618.nc + $DIN_LOC_ROOT/atm/datm7/ERA5/ERA5.TL639.2019.08.200618.nc + $DIN_LOC_ROOT/atm/datm7/ERA5/ERA5.TL639.2019.09.200618.nc + $DIN_LOC_ROOT/atm/datm7/ERA5/ERA5.TL639.2019.10.200618.nc + $DIN_LOC_ROOT/atm/datm7/ERA5/ERA5.TL639.2019.11.200618.nc + $DIN_LOC_ROOT/atm/datm7/ERA5/ERA5.TL639.2019.12.200618.nc + + + u10 Sa_u + v10 Sa_v + t2m Sa_tbot + skt Sa_tskn + d2m Sa_tdew + msl Sa_pslv + sp Sa_pbot + tp Faxa_rain + cp Faxa_rainc + lsp Faxa_rainl + csf Faxa_snowc + lsf Faxa_snowl + ssrd Faxa_swdn + ssr Faxa_swnet + strd Faxa_lwdn + str Faxa_lwnet + aluvp Faxa_swvdr + aluvd Faxa_swvdf + alnip Faxa_swndr + alnid Faxa_swndf + sshf Faxa_sen + slhf Faxa_lat + ewss Faxa_taux + nsss Faxa_tauy + + null + 1900 + 2019 + 2019 + 0 + bilinear + u:v, taux:tauy + linear + cycle + 1.5 + single + + + + + + + + + + + none + + + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_global_simyr_1750-2014_CMIP6_c180929.nc + + + CO2 Sa_co2diag + + null + 1850 + 1850 + 2014 + 0 + none + null + linear + extend + 1.e30 + single + + + + + none + + + fco2_datm_global_ssp585_simyr_1750-2020_CMIP6_c200324.nc + + + CO2 Sa_co2diag + + null + 213 + 198 + 1850 + 2019 + 0 + bilinear + null + linear + cycle + 1.5 + single + + + + + none + + + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP1-1.9_simyr_2014-2500_CMIP6_c190514.nc + + + CO2 Sa_co2diag + + null + 2015 + 2015 + 2500 + 0 + bilinear + null + linear + extend + 1.e30 + single + + + + + none + + + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP1-2.6__simyr_2014-2500_CMIP6_c190506.nc + + + CO2 Sa_co2diag + + null + 2015 + 2015 + 2500 + 0 + bilinear + null + linear + extend + 1.e30 + single + + + + + none + + + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP2-4.5__simyr_2014-2500_CMIP6_c190506.nc + + + CO2 Sa_co2diag + + null + 2015 + 2015 + 2500 + 0 + bilinear + null + linear + extend + 1.e30 + single + + + + + none + + + null + + + $DIN_LOC_ROOT/atm/datm7/CO2/co2_datm_lat-bandsSSP3-7.0__simyr_2014-2500_CMIP6_c190506.nc + + + CO2 Sa_co2diag + + 2015 + 2015 + 2500 + 0 + bilinear + null + linear + extend + 1.e30 + single + + + + + none + + + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP4-3.4_simyr_2014-2500_CMIP6_c190514.nc + + + CO2 Sa_co2diag + + null + 2015 + 2015 + 2500 + 0 + bilinear + null + linear + extend + 1.e30 + single + + + + + none + + + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP4-6.0__simyr_2014-2500_CMIP6_c190506.nc + + + CO2 Sa_co2diag + + null + 2015 + 2015 + 2500 + 0 + bilinear + null + linear + extend + 1.e30 + single + + + + + none + + + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP5-3.4__simyr_2014-2500_CMIP6_c190506.nc + + + CO2 Sa_co2diag + + null + 2015 + 2015 + 2500 + 0 + bilinear + null + linear + extend + 1.e30 + single + + + + + none + + + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP5-8.5__simyr_2014-2500_CMIP6_c190506.nc + + + CO2 Sa_co2diag + + null + 2015 + 2015 + 2500 + 0 + bilinear + null + linear + extend + 1.e30 + single + + + + + none + + + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP1-1.9_simyr_2014-2501_CMIP6_c190514.nc + + + CO2 Sa_co2diag + + null + 2015 + 2015 + 2500 + 0 + bilinear + null + linear + extend + 1.e30 + single + + + + + none + + + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP1-2.6__simyr_2014-2501_CMIP6_c190506.nc + + + CO2 Sa_co2diag + + null + 2015 + 2015 + 2500 + 0 + bilinear + null + linear + extend + 1.e30 + single + + + + + none + + + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP2-4.5__simyr_2014-2501_CMIP6_c190506.nc + + + CO2 Sa_co2diag + + null + 2015 + 2015 + 2500 + 0 + bilinear + null + linear + extend + 1.e30 + single + + + + + none + + + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP3-7.0__simyr_2014-2501_CMIP6_c190506.nc + + + CO2 Sa_co2diag + + null + 2015 + 2015 + 2500 + 0 + bilinear + null + linear + extend + 1.e30 + single + + + + + none + + + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP4-3.4_simyr_2014-2501_CMIP6_c190514.nc + + + CO2 Sa_co2diag + + null + 2015 + 2015 + 2500 + 0 + bilinear + null + linear + extend + 1.e30 + single + + + + + none + + + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP4-6.0__simyr_2014-2501_CMIP6_c190506.nc + + + CO2 Sa_co2diag + + null + 2015 + 2015 + 2500 + 0 + bilinear + null + linear + extend + 1.e30 + single + + + + + none + + + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP5-3.4__simyr_2014-2501_CMIP6_c190506.nc + + + CO2 Sa_co2diag + + null + 2015 + 2015 + 2500 + 0 + bilinear + null + linear + extend + 1.e30 + single + + + + + none + + + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP5-8.5__simyr_2014-2501_CMIP6_c190506.nc + + + CO2 Sa_co2diag + + null + 2015 + 2015 + 2500 + 0 + bilinear + null + linear + extend + 1.e30 + single + + + + + + + + + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc + + + $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc + + + BCDEPWET Faxa_bcphiwet + BCPHODRY Faxa_bcphodry + BCPHIDRY Faxa_bcphidry + OCDEPWET Faxa_ocphiwet + OCPHIDRY Faxa_ocphidry + OCPHODRY Faxa_ocphodry + DSTX01WD Faxa_dstwet1 + DSTX01DD Faxa_dstdry1 + DSTX02WD Faxa_dstwet2 + DSTX02DD Faxa_dstdry2 + DSTX03WD Faxa_dstwet3 + DSTX03DD Faxa_dstdry3 + DSTX04WD Faxa_dstwet4 + DSTX04DD Faxa_dstdry4 + + null + 1 + $DATM_CPLHIST_YR_START + $DATM_CPLHIST_YR_END + 0 + bilinear + null + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc + + + $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc + + + BCDEPWET Faxa_bcphiwet + BCPHODRY Faxa_bcphodry + BCPHIDRY Faxa_bcphidry + OCDEPWET Faxa_ocphiwet + OCPHIDRY Faxa_ocphidry + OCPHODRY Faxa_ocphodry + DSTX01WD Faxa_dstwet1 + DSTX01DD Faxa_dstdry1 + DSTX02WD Faxa_dstwet2 + DSTX02DD Faxa_dstdry2 + DSTX03WD Faxa_dstwet3 + DSTX03DD Faxa_dstdry3 + DSTX04WD Faxa_dstwet4 + DSTX04DD Faxa_dstdry4 + + null + 1 + 2000 + 2000 + 0 + bilinear + null + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc + + + $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc + + + BCDEPWET Faxa_bcphiwet + BCPHODRY Faxa_bcphodry + BCPHIDRY Faxa_bcphidry + OCDEPWET Faxa_ocphiwet + OCPHIDRY Faxa_ocphidry + OCPHODRY Faxa_ocphodry + DSTX01WD Faxa_dstwet1 + DSTX01DD Faxa_dstdry1 + DSTX02WD Faxa_dstwet2 + DSTX02DD Faxa_dstdry2 + DSTX03WD Faxa_dstwet3 + DSTX03DD Faxa_dstdry3 + DSTX04WD Faxa_dstwet4 + DSTX04DD Faxa_dstdry4 + + null + 1 + 2010 + 2010 + 0 + bilinear + null + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc + + + $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc + + + BCDEPWET Faxa_bcphiwet + BCPHODRY Faxa_bcphodry + BCPHIDRY Faxa_bcphidry + OCDEPWET Faxa_ocphiwet + OCPHIDRY Faxa_ocphidry + OCPHODRY Faxa_ocphodry + DSTX01WD Faxa_dstwet1 + DSTX01DD Faxa_dstdry1 + DSTX02WD Faxa_dstwet2 + DSTX02DD Faxa_dstdry2 + DSTX03WD Faxa_dstwet3 + DSTX03DD Faxa_dstdry3 + DSTX04WD Faxa_dstwet4 + DSTX04DD Faxa_dstdry4 + + null + 1849 + 1849 + 2014 + 0 + bilinear + null + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc + + + $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerodep_clm_SSP126_b.e21.BSSP126cmip6.f09_g17.CMIP6-SSP1-2.6.001_2014-2101_monthly_0.9x1.25_c190523.nc + + + BCDEPWET Faxa_bcphiwet + BCPHODRY Faxa_bcphodry + BCPHIDRY Faxa_bcphidry + OCDEPWET Faxa_ocphiwet + OCPHIDRY Faxa_ocphidry + OCPHODRY Faxa_ocphodry + DSTX01WD Faxa_dstwet1 + DSTX01DD Faxa_dstdry1 + DSTX02WD Faxa_dstwet2 + DSTX02DD Faxa_dstdry2 + DSTX03WD Faxa_dstwet3 + DSTX03DD Faxa_dstdry3 + DSTX04WD Faxa_dstwet4 + DSTX04DD Faxa_dstdry4 + + null + 2015 + 2015 + 2101 + 0 + bilinear + null + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc + + + $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerodep_clm_SSP245_b.e21.BWSSP245cmip6.f09_g17.CMIP6-SSP2-4.5-WACCM.001_2014-2101_monthly_0.9x1.25_c190401.nc + + + BCDEPWET Faxa_bcphiwet + BCPHODRY Faxa_bcphodry + BCPHIDRY Faxa_bcphidry + OCDEPWET Faxa_ocphiwet + OCPHIDRY Faxa_ocphidry + OCPHODRY Faxa_ocphodry + DSTX01WD Faxa_dstwet1 + DSTX01DD Faxa_dstdry1 + DSTX02WD Faxa_dstwet2 + DSTX02DD Faxa_dstdry2 + DSTX03WD Faxa_dstwet3 + DSTX03DD Faxa_dstdry3 + DSTX04WD Faxa_dstwet4 + DSTX04DD Faxa_dstdry4 + + null + 2015 + 2015 + 2101 + 0 + bilinear + null + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc + + + $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerodep_clm_SSP370_b.e21.BWSSP370cmip6.f09_g17.CMIP6-SSP3-7.0-WACCM.001_2014-2101_monthly_0.9x1.25_c190402.nc + + + BCDEPWET Faxa_bcphiwet + BCPHODRY Faxa_bcphodry + BCPHIDRY Faxa_bcphidry + OCDEPWET Faxa_ocphiwet + OCPHIDRY Faxa_ocphidry + OCPHODRY Faxa_ocphodry + DSTX01WD Faxa_dstwet1 + DSTX01DD Faxa_dstdry1 + DSTX02WD Faxa_dstwet2 + DSTX02DD Faxa_dstdry2 + DSTX03WD Faxa_dstwet3 + DSTX03DD Faxa_dstdry3 + DSTX04WD Faxa_dstwet4 + DSTX04DD Faxa_dstdry4 + + null + 2015 + 2015 + 2101 + 0 + bilinear + null + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc + + + null + + + BCDEPWET Faxa_bcphiwet + BCPHODRY Faxa_bcphodry + BCPHIDRY Faxa_bcphidry + OCDEPWET Faxa_ocphiwet + OCPHIDRY Faxa_ocphidry + OCPHODRY Faxa_ocphodry + DSTX01WD Faxa_dstwet1 + DSTX01DD Faxa_dstdry1 + DSTX02WD Faxa_dstwet2 + DSTX02DD Faxa_dstdry2 + DSTX03WD Faxa_dstwet3 + DSTX03DD Faxa_dstdry3 + DSTX04WD Faxa_dstwet4 + DSTX04DD Faxa_dstdry4 + + null + 2015 + 2015 + 2101 + 0 + bilinear + null + linear + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc + + + $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerodep_clm_SSP585_b.e21.BSSP585cmip6.f09_g17.CMIP6-SSP5-8.5.001_2014-2101_monthly_0.9x1.25_c190419.nc + + + BCDEPWET Faxa_bcphiwet + BCPHODRY Faxa_bcphodry + BCPHIDRY Faxa_bcphidry + OCDEPWET Faxa_ocphiwet + OCPHIDRY Faxa_ocphidry + OCPHODRY Faxa_ocphodry + DSTX01WD Faxa_dstwet1 + DSTX01DD Faxa_dstdry1 + DSTX02WD Faxa_dstwet2 + DSTX02DD Faxa_dstdry2 + DSTX03WD Faxa_dstwet3 + DSTX03DD Faxa_dstdry3 + DSTX04WD Faxa_dstwet4 + DSTX04DD Faxa_dstdry4 + + null + 2015 + 2015 + 2101 + 0 + bilinear + null + linear + cycle + 1.5 + single + + + + + + + + + $ATM_DOMAIN_MESH + + + $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x3h.%ym.nc + + + a2x3h_Sa_topo Sa_topo + + null + $DATM_CPLHIST_YR_ALIGN + $DATM_CPLHIST_YR_START + $DATM_CPLHIST_YR_END + 0 + bilinear + null + nearest + cycle + 3.0 + single + + + + $ATM_DOMAIN_MESH + + + $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x1d.%ym.nc + + + a2x1d_Faxa_bcphiwet Faxa_bcphiwet + a2x1d_Faxa_bcphodry Faxa_bcphodry + a2x1d_Faxa_bcphidry Faxa_bcphidry + a2x1d_Faxa_ocphiwet Faxa_ocphiwet + a2x1d_Faxa_ocphidry Faxa_ocphidry + a2x1d_Faxa_ocphodry Faxa_ocphodry + a2x1d_Faxa_dstwet1 Faxa_dstwet1 + a2x1d_Faxa_dstdry1 Faxa_dstdry1 + a2x1d_Faxa_dstwet2 Faxa_dstwet2 + a2x1d_Faxa_dstdry2 Faxa_dstdry2 + a2x1d_Faxa_dstwet3 Faxa_dstwet3 + a2x1d_Faxa_dstdry3 Faxa_dstdry3 + a2x1d_Faxa_dstwet4 Faxa_dstwet4 + a2x1d_Faxa_dstdry4 Faxa_dstdry4 + + null + $DATM_CPLHIST_YR_ALIGN + $DATM_CPLHIST_YR_START + $DATM_CPLHIST_YR_END + 0 + bilinear + null + nearest + cycle + 3.0 + single + + + + + $ATM_DOMAIN_MESH + + + $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x1hi.%ym.nc + + + a2x1hi_Faxa_swndr Faxa_swndr + a2x1hi_Faxa_swvdr Faxa_swvdr + a2x1hi_Faxa_swndf Faxa_swndf + a2x1hi_Faxa_swvdf Faxa_swvdf + + null + $DATM_CPLHIST_YR_ALIGN + $DATM_CPLHIST_YR_START + $DATM_CPLHIST_YR_END + 2700 + bilinear + null + coszen + cycle + 3.0 + single + + + + + $ATM_DOMAIN_MESH + + + $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x3h.%ym.nc + + + a2x3h_Faxa_rainc Faxa_rainc + a2x3h_Faxa_rainl Faxa_rainl + a2x3h_Faxa_snowc Faxa_snowc + a2x3h_Faxa_snowl Faxa_snowl + a2x3h_Faxa_lwdn Faxa_lwdn + + null + $DATM_CPLHIST_YR_ALIGN + $DATM_CPLHIST_YR_START + $DATM_CPLHIST_YR_END + 900 + nearest + null + linear + cycle + 3.0 + single + + + + + $ATM_DOMAIN_MESH + + + $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x3h.%ym.nc + + + a2x3h_Sa_z Sa_z + a2x3h_Sa_tbot Sa_tbot + a2x3h_Sa_ptem Sa_ptem + a2x3h_Sa_shum Sa_shum + a2x3h_Sa_pbot Sa_pbot + a2x3h_Sa_dens Sa_dens + a2x3h_Sa_pslv Sa_pslv + a2x3h_Sa_co2diag Sa_co2diag + a2x3h_Sa_co2prog Sa_co2prog + + null + $DATM_CPLHIST_YR_ALIGN + $DATM_CPLHIST_YR_START + $DATM_CPLHIST_YR_END + 900 + bilinear + null + linear + cycle + 3.0 + single + + + + + $ATM_DOMAIN_MESH + + + $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x1h.%ym.nc + + + a2x1h_Sa_u Sa_u + a2x1h_Sa_v Sa_v + + null + $DATM_CPLHIST_YR_ALIGN + $DATM_CPLHIST_YR_START + $DATM_CPLHIST_YR_END + 900 + bilinear + null + linear + cycle + 3.0 + single + + + + + + + + + $DIN_LOC_ROOT/atm/datm7/topo_forcing/topodata_0.9x1.SCRIP.210520_ESMFmesh.nc + + + $DIN_LOC_ROOT/atm/datm7/topo_forcing/topodata_0.9x1.25_USGS_070110_stream_c151201.nc + + + TOPO Sa_topo + + null + 1 + 1 + 1 + 0 + bilinear + null + + lower + cycle + 1.5 + single + + + diff --git a/dice/cime_config/buildnml b/dice/cime_config/buildnml index a5917b413..6f0bc96b6 100755 --- a/dice/cime_config/buildnml +++ b/dice/cime_config/buildnml @@ -38,7 +38,6 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path # Write out dice_in and dice.streams.xml #---------------------------------------------------- - caseroot = case.get_value("CASEROOT") dice_mode = case.get_value("DICE_MODE") ice_grid = case.get_value("ICE_GRID") ice_nx = case.get_value("ICE_NX") @@ -63,6 +62,7 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path scol_mode = True if case.get_value('PTS_MODE') else False config['set_model_maskfile'] = 'true' if scol_mode or (ice_nx==atm_nx and ice_ny==atm_ny) else 'false' + # Initialize nmlgen nmlgen.init_defaults(infile, config) # Generate dice_in @@ -70,9 +70,12 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path nmlgen.write_output_file(namelist_file, data_list_path, groups=['dice_nml']) # Generate dice.streams.xml - streams = nmlgen.get_streams() - stream_path = os.path.join(confdir, "dice.streams"+inst_string+".xml" ) - nmlgen.create_nuopc_stream_files(config, caseroot, streams, stream_path, data_list_path) + streamlist = nmlgen.get_streams() + stream_definition_file = os.path.join(_CIMEROOT, "src", "components", + "cdeps", "dice", "cime_config", "stream_definition_dice.xml") + streams = StreamCDEPS(stream_definition_file, case) + outfile = os.path.join(confdir, "dice.streams"+inst_string+".xml" ) + streams.create_stream_xml(streamlist, case, outfile) ############################################################################### def buildnml(case, caseroot, compname): diff --git a/dice/cime_config/namelist_definition_dice.xml b/dice/cime_config/namelist_definition_dice.xml index 56fb4062f..fe18d508a 100644 --- a/dice/cime_config/namelist_definition_dice.xml +++ b/dice/cime_config/namelist_definition_dice.xml @@ -4,23 +4,10 @@ - - - - + + char(100) + streams + streams_file + List of streams used for the given dice_mode. + + ssmi_iaf + ssmi_nyf + + char @@ -52,312 +46,12 @@ - - - - - - char(100) - streams - streams_file - List of streams used for the given dice_mode. - - ssmi - ssmi_iaf - - - - - char - streams - derived - stream mesh (appears in the stream xml file) - - - $DIN_LOC_ROOT/ice/dice7/SSMI/ssmi.ifrac.0.5x0.5_ESMFmesh_120520.nc - - - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5_ESMFmesh_120520.nc - - - - - - char - streams - streams_file - Stream domain file directory. - - null - - - - - char - streams - derived - stream data files (appears in the stream xml files) - - - null - - - $DIN_LOC_ROOT/ice/dice7/SSMI/ssmi_ifrac.clim.x0.5.090319.nc - - - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1948.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1949.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1950.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1951.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1952.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1953.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1954.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1955.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1956.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1957.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1958.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1959.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1960.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1961.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1962.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1963.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1964.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1965.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1966.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1967.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1968.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1969.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1970.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1971.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1972.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1973.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1974.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1975.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1976.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1977.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1978.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1979.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1980.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1981.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1982.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1983.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1984.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1985.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1986.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1987.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1988.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1989.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1990.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1991.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1992.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1993.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1994.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1995.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1996.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1997.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1998.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.1999.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.2000.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.2001.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.2002.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.2003.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.2004.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.2005.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.2006.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.2007.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.2008.20120420.nc - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.2009.20120420.nc - - - - - - char - streams - streams_file - Stream data variable name(s) (this appears in the stream xml file) - - - ifrac Si_ifrac - - - - - - integer - streams - streams_file - Stream offset (this appears in the stream xml file) - - 0 - - - - - integer - streams - streams_file - Simulation year to align stream to. - - -999 - 1 - 1 - - - - - integer - streams - streams_file - First year of stream. - - -999 - 1 - 1948 - - - - - integer - streams - streams_file - Last year of stream. - - -999 - 1 - 2009 - - - - - char(30) - streams - streams_file - copy,bilinear,nn,nnoni,nnonj,spval - - array (up to 30 elements) of fill algorithms associated with the array - of streams. valid options are copy by index, set to special value, - nearest neighbor, nearest neighbor in "i" direction, nearest neighbor - in "j" direction, or bilinear. - valid values: copy,spval,nn,nnoni,nnonj,bilinear - - - bilinear - - - - - char(30) - streams - streams_file - coszen,nearest,linear,lower,upper - - array (up to 30 elements) of time interpolation options associated with the array of - streams. - valid values: lower,upper,nearest,linear,coszen - lower = Use lower time-value - upper = Use upper time-value - nearest = Use the nearest time-value - linear = Linearly interpolate between the two time-values - coszen = Scale according to the cosine of the solar zenith angle (for solar) - - - linear - - - - - char(30) - streams - streams_file - extend,cycle,limit - - array of time axis modes associated with the array of streams for - handling data outside the specified stream time axis. - valid options are to cycle the data based on the first, last, and - align settings associated with the stream dataset, to extend the first - and last valid value indefinitely, or to limit the interpolated data - to fall only between the least and greatest valid value of the time array. - valid values: cycle,extend,limit - extend = extrapolate before and after the period by using the first or last value. - cycle = cycle between the range of data - limit = restrict to the period for which the data is valid - - - cycle - - - - - char(30) - streams - streams_file - single,full_file - - array (up to 30 elements) of reading mode associated with the array of - streams. specifies the mode of reading temporal stream dataset. - valid options are "single" (read temporal dataset one at a time) or - "full_file" (read all entires of temporal dataset in a given netcdf file) - valid values: single,full_file - - - single - - - - - real(30) - streams - streams_file - - array (up to 30 elements) of delta time ratio limits placed on the - time interpolation associated with the array of streams. this real - value causes the model to stop if the ratio of the running maximum - delta time divided by the minimum delta time is greater than the - dtlimit for that stream. for instance, with daily data, the delta - time should be exactly one day throughout the dataset and the computed - maximum divided by minimum delta time should always be 1.0. for - monthly data, the delta time should be between 28 and 31 days and the - maximum ratio should be about 1.1. the running value of the delta - time is computed as data is read and any wraparound or cycling is also - included. this input helps trap missing data or errors in cycling. - to turn off trapping, set the value to 1.0e30 or something similar. - - - 1.5e0 - - - - - char - streams - streams_file - - list of paired colon delimited field names that should be treated as - vectors when carrying out spatial interpolation. unlike other - character arrays in this namelist, this array is completely decoupled - from the list of streams. this is a list of vector pairs that span - all input streams where different fields of the vector pair could - appear in different streams. - for example, vectors = 'u:v','taux:tauy'. - - - null - - - - - - - - + char streams abs dice_nml - - file specifying model mesh - + file specifying model mesh $ICE_DOMAIN_MESH null @@ -386,9 +80,7 @@ streams abs dice_nml - - file specifying model mesh - + file specifying if model mesh is to be created at runtime null $ICE_DOMAIN_PATH/$ICE_DOMAIN_FILE diff --git a/dice/cime_config/stream_definition_dice.xml b/dice/cime_config/stream_definition_dice.xml new file mode 100644 index 000000000..6d4b99945 --- /dev/null +++ b/dice/cime_config/stream_definition_dice.xml @@ -0,0 +1,54 @@ + + + + + + + + + $DIN_LOC_ROOT/ice/dice7/SSMI/ssmi.ifrac.0.5x0.5_ESMFmesh_120520.nc + + + $DIN_LOC_ROOT/ice/dice7/SSMI/ssmi_ifrac.clim.x0.5.090319.nc + + + ifrac Si_ifrac + + null + 1 + 1 + 1 + 0 + bilinear + linear + null + cycle + 1.5e0 + single + + + + + $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5_ESMFmesh_120520.nc + + + $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.%y.nc + $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.%y.20120420.nc + + + ifrac Si_ifrac + + null + 1 + 1948 + 2009 + 0 + bilinear + linear + null + cycle + 1.5 + single + + + diff --git a/dlnd/cime_config/buildnml b/dlnd/cime_config/buildnml index 774d12fe9..0832237ba 100755 --- a/dlnd/cime_config/buildnml +++ b/dlnd/cime_config/buildnml @@ -62,17 +62,20 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path expect(not scol_mode, "for DLND, single column mode is not allowed") - # initialize nmlgen + # Initialize nmlgen nmlgen.init_defaults(infile, config) # Generate dlnd_in namelist_file = os.path.join(confdir, "dlnd_in") nmlgen.write_output_file(namelist_file, data_list_path, groups=['dlnd_nml']) - # Generate dlnd.stream.xml - streams = nmlgen.get_streams() - stream_path = os.path.join(confdir, "dlnd.streams"+inst_string+".xml" ) - nmlgen.create_nuopc_stream_files(config, caseroot, streams, stream_path, data_list_path) + # Generate dlnd.streams.xml + streamlist = nmlgen.get_streams() + stream_definition_file = os.path.join(_CIMEROOT, "src", "components", + "cdeps", "dlnd", "cime_config", "stream_definition_dlnd.xml") + streams = StreamCDEPS(stream_definition_file, case) + outfile = os.path.join(confdir, "dlnd.streams"+inst_string+".xml" ) + streams.create_stream_xml(streamlist, case, outfile) ############################################################################### def buildnml(case, caseroot, compname): diff --git a/dlnd/cime_config/namelist_definition_dlnd.xml b/dlnd/cime_config/namelist_definition_dlnd.xml index e68516932..954dd84f6 100644 --- a/dlnd/cime_config/namelist_definition_dlnd.xml +++ b/dlnd/cime_config/namelist_definition_dlnd.xml @@ -6,47 +6,11 @@ - - - - - - char - dlnd - dlnd_nml - copyall - - Copies all fields directly from the input data streams Any required - fields not found on an input stream will be set to zero. - - - copyall - - - - - - - char(100) streams @@ -58,211 +22,21 @@ - - char - streams - streams_file - Stream domain file directory. - - $LND_DOMAIN_MESH - - - - - char - streams - streams_file - Stream domain file directory. - - null - - - - - char - streams - streams_file - Stream data file path(s). - - $DLND_CPLHIST_DIR/$DLND_CPLHIST_CASE.cpl.hl2x1yr_glc.%y-01-01.nc - - - - - char - streams - streams_file - Stream data variable name(s). - - - l2x1yr_glc_Sl_tsrf%glc Sl_tsrf_elev%glc - l2x1yr_glc_Sl_topo%glc Sl_topo_elev%glc - l2x1yr_glc_Flgl_qice%glc Flgl_qice_elev%glc - - - - - - integer - streams - streams_file - Stream offset. - - 0 - - - - - integer - streams - streams_file - Simulation year to align stream to. - - $DLND_CPLHIST_YR_ALIGN - - - - - integer - streams - streams_file - First year of stream. - - $DLND_CPLHIST_YR_START - - - - - integer - streams - streams_file - Last year of stream. - - $DLND_CPLHIST_YR_END - - - - - char(30) - streams - streams_file - bilinear,nn - - fill algorithms associated with the array of streams. - valid values: nn,bilinear - - - bilinear - - - - - char(30) - streams - streams_file - coszen,nearest,linear,lower,upper - - time interpolation options associated with the array of - streams. - valid values: lower,upper,nearest,linear,coszen - lower = Use lower time-value - upper = Use upper time-value - nearest = Use the nearest time-value - linear = Linearly interpolate between the two time-values - coszen = Scale according to the cosine of the solar zenith angle (for solar) - - - linear - lower - - - - - char(30) - streams - streams_file - extend,cycle,limit - - array of time axis modes associated with the array of streams for - handling data outside the specified stream time axis. - valid options are to cycle the data based on the first, last, and - align settings associated with the stream dataset, to extend the first - and last valid value indefinitely, or to limit the interpolated data - to fall only between the least and greatest valid value of the time array. - valid values: cycle,extend,limit - extend = extrapolate before and after the period by using the first or last value. - cycle = cycle between the range of data - limit = restrict to the period for which the data is valid - - - cycle - - - - - char(30) - streams - streams_file - single,full_file - - reading mode associated with the array of streams. - specifies the mode of reading temporal stream dataset. - valid options are - "single" (read temporal dataset one at a time) or - "full_file" (read all entires of temporal dataset in a given netcdf file) - valid values: single,full_file - - - single - - - - - real(30) - streams - streams_file - - delta time ratio limits placed on the - time interpolation associated with the array of streams. this real - value causes the model to stop if the ratio of the running maximum - delta time divided by the minimum delta time is greater than the - dtlimit for that stream. for instance, with daily data, the delta - time should be exactly one day throughout the dataset and the computed - maximum divided by minimum delta time should always be 1.0. for - monthly data, the delta time should be between 28 and 31 days and the - maximum ratio should be about 1.1. the running value of the delta - time is computed as data is read and any wraparound or cycling is also - included. this input helps trap missing data or errors in cycling. - to turn off trapping, set the value to 1.0e30 or something similar. - - - 1.5e0 - - - - + char - streams - streams_file + dlnd + dlnd_nml + copyall - list of paired colon delimited field names that should be treated as - vectors when carrying out spatial interpolation. unlike other - character arrays in this namelist, this array is completely decoupled - from the list of streams. this is a list of vector pairs that span - all input streams where different fields of the vector pair could - appear in different streams. - for example, vectors = 'u:v','taux:tauy'. + Copies all fields directly from the input data streams Any required + fields not found on an input stream will be set to zero. - null + copyall - - - - - + char streams abs diff --git a/dlnd/cime_config/stream_definition_dlnd.xml b/dlnd/cime_config/stream_definition_dlnd.xml new file mode 100644 index 000000000..ec50e7a1b --- /dev/null +++ b/dlnd/cime_config/stream_definition_dlnd.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + $LND_DOMAIN_MESH + + + $DLND_CPLHIST_DIR/$DLND_CPLHIST_CASE.cpl.hl2x1yr_glc.%y-01-01.nc + + + l2x1yr_glc_Sl_tsrf%glc Sl_tsrf_elev%glc + l2x1yr_glc_Sl_topo%glc Sl_topo_elev%glc + l2x1yr_glc_Flgl_qice%glc Flgl_qice_elev%glc + + null + $DLND_CPLHIST_YR_ALIGN + $DLND_CPLHIST_YR_START + $DLND_CPLHIST_YR_END + 0 + bilinear + lower + null + cycle + 1.5e0 + single + + + diff --git a/docn/cime_config/buildnml b/docn/cime_config/buildnml index c1798d8c0..4a632b9e5 100755 --- a/docn/cime_config/buildnml +++ b/docn/cime_config/buildnml @@ -20,6 +20,7 @@ from CIME.XML.files import Files from CIME.nmlgen import NamelistGenerator from CIME.utils import expect, safe_copy from CIME.buildnml import create_namelist_infile, parse_input, copy_inputs_to_rundir +from CIME.XML.stream_cdeps import StreamCDEPS logger = logging.getLogger(__name__) @@ -34,9 +35,8 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path different instances. The `confdir` argument is used to specify the directory in which output files will be placed. """ - #---------------------------------------------------- - # Write out docn_in and docn.streamss.xml + # Write out docn_in and docn.streams.xml #---------------------------------------------------- caseroot = case.get_value("CASEROOT") @@ -80,11 +80,14 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path else: generate_stream_file = True if generate_stream_file: + # Create the list of streams + streamlist = nmlgen.get_streams() # Create stream xml file - docn.streams.xml - # first construct the list of streams - this uses the "streamlist" namelist_definition_docn.xml values - streams = nmlgen.get_streams() - stream_path = os.path.join(confdir, "docn.streams"+inst_string+".xml" ) - nmlgen.create_nuopc_stream_files(config, caseroot, streams, stream_path, data_list_path) + stream_definition_file = os.path.join(_CIMEROOT, "src", "components", + "cdeps", "docn", "cime_config", "stream_definition_docn.xml") + streams = StreamCDEPS(stream_definition_file, case) + outfile = os.path.join(confdir, "docn.streams"+inst_string+".xml" ) + streams.create_stream_xml(streamlist, case, outfile) ############################################################################### def buildnml(case, caseroot, compname): diff --git a/docn/cime_config/namelist_definition_docn.xml b/docn/cime_config/namelist_definition_docn.xml index 297048f2a..77ce5ad2d 100644 --- a/docn/cime_config/namelist_definition_docn.xml +++ b/docn/cime_config/namelist_definition_docn.xml @@ -4,23 +4,36 @@ - - Replace any instance of the following substring indicators with the appropriate values: - %y = year from the range yearfirst to yearlast - %ym = year-month from the range yearfirst to yearlast with all 12 months - %ymd = year-month-day from the range yearfirst to yearlast with all 12 months - --> - - - - + + char(100) + streams + streams_file + + List of streams that docn supports. + The following are supported: prescribed, aquapfile, som, som_aquqp, interannual, and blank. + The streamslist + + + prescribed + interannual + som + som_aquap + aquapfile + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + + char @@ -96,320 +109,6 @@ - - - - - - char(100) - streams - streams_file - - List of streams that docn supports. - The following are supported: prescribed, aquapfile, som, som_aquqp, interannual, and blank. - The streamslist - - - prescribed - interannual - som - som_aquap - aquapfile - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - - - - - char - streams - streams_file - Stream mesh files - - - $DIN_LOC_ROOT/share/meshes/T31_040122_ESMFmesh.nc - - - $DIN_LOC_ROOT/share/meshes/fv1.9x2.5_141008_ESMFmesh.nc - - - $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc - - - $DIN_LOC_ROOT/share/meshes/fv0.47x0.63_141008_ESMFmesh.nc - - - - - - $DIN_LOC_ROOT/share/meshes/fv4x5_050615_polemod_ESMFmesh.nc - - - $DIN_LOC_ROOT/atm/cam/sst/sst_HadOIBl_bc_1x1_clim_c101029_ESMFmesh_120520.nc - - - $DIN_LOC_ROOT/ocn/docn7/SOM/pop_frc.1x1d.SCRIP.030620_ESMFmesh.nc - - - $DIN_LOC_ROOT/share/meshes/fv1.9x2.5_141008_ESMFmesh.nc - - - $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc - - - $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc - - - - - - char - streams - streams_file - Stream domain file directory. - - null - - - - - char - streams - derived - does not appear in namelist - only used to set domain and data information - - - $SSTICE_DATA_FILENAME - - - $DIN_LOC_ROOT/ocn/docn7/SOM/pop_frc.1x1d.090130.nc - - - $DIN_LOC_ROOT/ocn/docn7/SOM/default.som.forcing.aquaplanet.Qflux0_h30_sstQOBS.2degFV_c20170421.nc - - - $DIN_LOC_ROOT/ocn/docn7/SOM/default.som.forcing.aquaplanet.Qflux0_h30_sstQOBS.1degFV_c20170421.nc - - - sst_c4aquasom_0.9x1.25_clim.c170512.nc - - - - - - char - streams - streams_file - Stream data variable name(s). - - - T So_t - S So_s - U So_u - V So_v - dhdx So_dhdx - dhdy So_dhdy - hblt So_h - qdp So_qbot - - - T So_t - S So_s - U So_u - V So_v - dhdx So_dhdx - dhdy So_dhdy - hblt So_h - qdp So_qbot - - - SST_cpl So_t - - - SST_cpl So_t - - - SST_cpl So_t - - - - - - integer - streams - streams_file - Stream offset. - - 0 - - - - - integer - streams - streams_file - Simulation year to align stream to. - - -999 - $SSTICE_YEAR_ALIGN - 0 - 1 - 1 - - - - - integer - streams - streams_file - First year of stream. - - -999 - $SSTICE_YEAR_START - 0 - 1 - 1850 - - - - - integer - streams - streams_file - Last year of stream. - - -999 - $SSTICE_YEAR_END - 0 - 1 - 2014 - - - - - char(30) - streams - streams_file - bilinear,nn - - type of mapping from stream mesh -> model mesh - - - bilinear - - - - - char(30) - streams - streams_file - coszen,nearest,linear,lower,upper - - time interpolation options of stream time to model time - valid values: lower,upper,nearest,linear,coszen - lower = Use lower time-value - upper = Use upper time-value - nearest = Use the nearest time-value - linear = Linearly interpolate between the two time-values - coszen = Scale according to the cosine of the solar zenith angle (for solar) - - - linear - - - - - char(30) - streams - streams_file - extend,cycle,limit - - specifies how to handle data outside the specified stream time - axis. valid options are to cycle the data based on the first, - last, and align settings associated with the stream dataset, to - extend the first and last valid value indefinitely, or to limit - the interpolated data to fall only between the least and - greatest valid value of the time array. - valid values: cycle,extend,limit - ==> extend = extrapolate before and after the period by using the first or last value. - ==> cycle = cycle between the range of data - ==> limit = restrict to the period for which the data is valid - - - cycle - - - - - char(30) - streams - streams_file - single,full_file - - mode of reading temporal stream dataset. valid options are - "single" (read temporal dataset one at a time) or "full_file" - (read all entires of temporal dataset in a given netcdf file) - valid values: single,full_file - - - single - - - - - real(30) - streams - streams_file - - delta time ratio limits placed on the time interpolation associated - with the array of streams. this real - value causes the model to stop if the ratio of the running maximum - delta time divided by the minimum delta time is greater than the - dtlimit for that stream. for instance, with daily data, the delta - time should be exactly one day throughout the dataset and the computed - maximum divided by minimum delta time should always be 1.0. for - monthly data, the delta time should be between 28 and 31 days and the - maximum ratio should be about 1.1. the running value of the delta - time is computed as data is read and any wraparound or cycling is also - included. this input helps trap missing data or errors in cycling. - to turn off trapping, set the value to 1.0e30 or something similar. - - - 1.5e0 - - - - - char - streams - streams_file - - list of paired colon delimited field names that should be treated as - vectors when carrying out spatial interpolation. unlike other - character arrays in this namelist, this array is completely decoupled - from the list of streams. this is a list of vector pairs that span - all input streams where different fields of the vector pair could - appear in different streams. - for example, vectors = 'u:v','taux:tauy'. - - - null - - - - - - - char streams diff --git a/docn/cime_config/stream_definition_docn.xml b/docn/cime_config/stream_definition_docn.xml new file mode 100644 index 000000000..9a5e39da0 --- /dev/null +++ b/docn/cime_config/stream_definition_docn.xml @@ -0,0 +1,145 @@ + + + + + + + + + $DIN_LOC_ROOT/share/meshes/T31_040122_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/fv1.9x2.5_141008_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/fv0.47x0.63_141008_ESMFmesh.nc + + $DIN_LOC_ROOT/share/meshes/fv4x5_050615_polemod_ESMFmesh.nc + $DIN_LOC_ROOT/atm/cam/sst/sst_HadOIBl_bc_1x1_clim_c101029_ESMFmesh_120520.nc + + + $SSTICE_DATA_FILENAME + + + SST_cpl So_t + + null + $SSTICE_YEAR_ALIGN + $SSTICE_YEAR_START + $SSTICE_YEAR_END + 0 + bilinear + linear + null + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/atm/cam/sst/sst_HadOIBl_bc_1x1_clim_c101029_ESMFmesh_120520.nc + + + $DIN_LOC_ROOT/atm/cam/sst/sst_HadOIBl_bc_1x1_1850_2014_c150416.nc + + + SST_cpl So_t + + null + 1 + 1850 + 2014 + 0 + bilinear + linear + null + cycle + 1.5e0 + single + + + + + $DIN_LOC_ROOT/ocn/docn7/SOM/pop_frc.1x1d.SCRIP.030620_ESMFmesh.nc + + + $DIN_LOC_ROOT/ocn/docn7/SOM/pop_frc.1x1d.090130.nc + + + T So_t + S So_s + U So_u + V So_v + dhdx So_dhdx + dhdy So_dhdy + hblt So_h + qdp So_qbot + + null + 1 + 1 + 1 + 0 + bilinear + linear + null + cycle + 1.5 + single + + + + + $DIN_LOC_ROOT/share/meshes/fv1.9x2.5_141008_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/fv1.9x2.5_141008_ESMFmesh.nc + + + $DIN_LOC_ROOT/ocn/docn7/SOM/default.som.forcing.aquaplanet.Qflux0_h30_sstQOBS.2degFV_c20170421.nc + $DIN_LOC_ROOT/ocn/docn7/SOM/default.som.forcing.aquaplanet.Qflux0_h30_sstQOBS.1degFV_c20170421.nc + + + T So_t + S So_s + U So_u + V So_v + dhdx So_dhdx + dhdy So_dhdy + hblt So_h + qdp So_qbot + + null + 1 + 1 + 1 + 0 + bilinear + linear + null + cycle + 1.5 + single + + + + + %DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc + + + sst_c4aquasom_0.9x1.25_clim.c170512.nc + + + SST_cpl So_t + + null + 0 + 0 + 0 + 0 + bilinear + linear + null + cycle + 1.5 + single + + + diff --git a/drof/cime_config/buildnml b/drof/cime_config/buildnml index 3d6231027..3fe7c0814 100755 --- a/drof/cime_config/buildnml +++ b/drof/cime_config/buildnml @@ -56,12 +56,12 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path config['drof_mode'] = drof_mode config['create_mesh'] = 'true' if case.get_value("ROF_DOMAIN_MESH") == 'create_mesh' else 'false' - # do not allow single column mode for drof + # Do not allow single column mode for drof scol_mode = True if case.get_value('PTS_MODE') else False expect(not scol_mode, "for, DROF single column mode is not allowed") - # initialize nmlgen + # Initialize nmlgen nmlgen.init_defaults(infile, config) # Generate drof_in @@ -69,9 +69,12 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path nmlgen.write_output_file(namelist_file, data_list_path, groups=['drof_nml']) # Generate drof.streams.xml - streams = nmlgen.get_streams() - stream_path = os.path.join(confdir, "drof.streams"+inst_string+".xml" ) - nmlgen.create_nuopc_stream_files(config, caseroot, streams, stream_path, data_list_path) + streamlist = nmlgen.get_streams() + stream_definition_file = os.path.join(_CIMEROOT, "src", "components", + "cdeps", "drof", "cime_config", "stream_definition_drof.xml") + streams = StreamCDEPS(stream_definition_file, case) + outfile = os.path.join(confdir, "drof.streams"+inst_string+".xml" ) + streams.create_stream_xml(streamlist, case, outfile) ############################################################################### def buildnml(case, caseroot, compname): diff --git a/drof/cime_config/namelist_definition_drof.xml b/drof/cime_config/namelist_definition_drof.xml index ffb397594..be837ce15 100644 --- a/drof/cime_config/namelist_definition_drof.xml +++ b/drof/cime_config/namelist_definition_drof.xml @@ -4,48 +4,6 @@ - - - - - - - - char - drof - drof_nml - copyall - - The runoff data is associated with the river model. - Copies all fields directly from the input data streams Any required - fields not found on an input stream will be set to zero. - The only datamode is copyall - the streams are determined by the xml variable $DROF_MODE - dataMode = "copyall" - - - copyall - - - - - - - char(100) streams @@ -66,398 +24,23 @@ - - char - streams - streams_file - Stream mesh - - - $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc - - - $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc - - - $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc - - - $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc - - - $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc - - - $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc - - - $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc - - - $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc - - - $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc - - - $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.iaf_ESMFmesh_120520.nc - - - $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.iaf_ESMFmesh_120520.nc - - - - - - - $ROF_DOMAIN_MESH - - - - - - char - streams - streams_file - Stream domain file directory. - - null - - - - - char - streams - streams_file - Stream data file path(s). - - - $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual.20190226.nc - - - $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual.20190226.nc - - - $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual.20190226.nc - - - $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual.20190226.nc - - - $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.iaf.20120419.nc - - - $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.iaf-AISx00.20120419.nc - - - $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.iaf-AISx45.20120419.nc - - - $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.iaf-AISx55.20120419.nc - - - $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual.20190226.nc - - - $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.iaf.20120419.nc - - - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1958.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1959.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1960.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1961.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1962.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1963.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1964.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1965.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1966.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1967.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1968.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1969.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1970.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1971.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1972.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1973.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1974.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1975.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1976.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1977.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1978.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1979.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1980.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1981.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1982.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1983.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1984.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1985.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1986.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1987.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1988.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1989.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1990.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1991.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1992.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1993.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1994.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1995.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1996.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1997.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1998.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.1999.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.2000.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.2001.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.2002.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.2003.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.2004.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.2005.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.2006.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.2007.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.2008.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.2009.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.2010.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.2011.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.2012.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.2013.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.2014.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.2015.170807.nc - $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.2016.170807.nc - - - $DROF_CPLHIST_DIR/$DROF_CPLHIST_CASE.cpl.hr2x.%ym.nc - - - - - - char - streams - streams_file - Stream data variable name(s). - - - runoff Forr_rofl - - - runoff Forr_rofl - - - runoff Forr_rofl - - - runoff Forr_rofl - - - runoff Forr_rofl - - - runoff Forr_rofl - - - runoff Forr_rofl - - - runoff Forr_rofl - - - runoff Forr_rofl - - - runoff Forr_rofl - - - rofl Forr_rofl - rofi Forr_rofi - - - rofImp_Forr_rofl Forr_rofl - rofImp_Forr_rofi Forr_rofi - - - - - - integer - streams - streams_file - Stream offset. - - 0 - 0 - - - - - integer - streams - streams_file - Simulation year to align stream to. - - 1 - $DROF_CPLHIST_YR_ALIGN - - - - - integer - streams - streams_file - First year of stream. - - 1 - 1 - 1 - 1 - 1948 - 1948 - 1948 - 1948 - 1958 - $DROF_CPLHIST_YR_START - - - - - integer - streams - streams_file - Last year of stream. - - 1 - 1 - 1 - 1 - 2009 - 2009 - 2009 - 2009 - 2018 - 2016 - $DROF_CPLHIST_YR_END - - - - - char(30) - streams - streams_file - bilinear,nn - - array (up to 30 elements) of fill algorithms associated with the array of streams. - default value: bilinear - valid values: bilinear, nn - - - bilinear - - - - - char(30) - streams - streams_file - coszen,nearest,linear,lower,upper - - array (up to 30 elements) of time interpolation options associated with the array of streams. - valid values: lower,upper,nearest,linear,coszen - lower = Use lower time-value - upper = Use upper time-value - nearest = Use the nearest time-value - linear = Linearly interpolate between the two time-values - coszen = Scale according to the cosine of the solar zenith angle (for solar) - - - linear - upper - upper - upper - nearest - - - - - char(30) - streams - streams_file - extend,cycle,limit - - array of time axis modes associated with the array of streams for - handling data outside the specified stream time axis. - valid options are to cycle the data based on the first, last, and - align settings associated with the stream dataset, to extend the first - and last valid value indefinitely, or to limit the interpolated data - to fall only between the least and greatest valid value of the time array. - valid values: cycle,extend,limit - extend = extrapolate before and after the period by using the first or last value. - cycle = cycle between the range of data - limit = restrict to the period for which the data is valid - - - cycle - - - - - char(30) - streams - streams_file - single,full_file - - array (up to 30 elements) of reading mode associated with the array of streams. - specifies the mode of reading temporal stream dataset. - valid options are "single" (read temporal dataset one at a time) or - "full_file" (read all entires of temporal dataset in a given netcdf file) - valid values: single,full_file - - - single - - - - - real(30) - streams - streams_file - - array (up to 30 elements) of delta time ratio limits placed on the - time interpolation associated with the array of streams. this real - value causes the model to stop if the ratio of the running maximum - delta time divided by the minimum delta time is greater than the - dtlimit for that stream. for instance, with daily data, the delta - time should be exactly one day throughout the dataset and the computed - maximum divided by minimum delta time should always be 1.0. for - monthly data, the delta time should be between 28 and 31 days and the - maximum ratio should be about 1.1. the running value of the delta - time is computed as data is read and any wraparound or cycling is also - included. this input helps trap missing data or errors in cycling. - to turn off trapping, set the value to 1.0e30 or something similar. - - - 3.0 - - - - + char - streams - streams_file + drof + drof_nml + copyall - list of paired colon delimited field names that should be treated as - vectors when carrying out spatial interpolation. unlike other - character arrays in this namelist, this array is completely decoupled - from the list of streams. this is a list of vector pairs that span - all input streams where different fields of the vector pair could - appear in different streams. - for example, vectors = 'u:v','taux:tauy'. + The runoff data is associated with the river model. + Copies all fields directly from the input data streams Any required + fields not found on an input stream will be set to zero. + The only datamode is copyall - the streams are determined by the xml variable $DROF_MODE + dataMode = "copyall" - null + copyall - - - - char streams diff --git a/drof/cime_config/stream_definition_drof.xml b/drof/cime_config/stream_definition_drof.xml new file mode 100644 index 000000000..c9db85693 --- /dev/null +++ b/drof/cime_config/stream_definition_drof.xml @@ -0,0 +1,286 @@ + + + + + + + + + $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc + + + $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual.20190226.nc + + + runoff Forr_rofl + + null + 1 + 1 + 1 + 0 + bilinear + upper + null + cycle + 3.0e0 + single + + + + + $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc + + + $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual.20190226.nc + + + runoff Forr_rofl + + null + 1 + 1 + 1 + 0 + bilinear + upper + null + cycle + 3.0e0 + single + + + + + $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc + + + $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual.20190226.nc + + + runoff Forr_rofl + + null + 1 + 1 + 1 + 0 + bilinear + upper + null + cycle + 3.0e0 + single + + + + + $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc + + + $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual.20190226.nc + + + runoff Forr_rofl + + null + 1 + 1 + 1 + 0 + bilinear + upper + null + cycle + 3.0e0 + single + + + + + $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc + + + $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual.20190226.nc + + + runoff Forr_rofl + + null + 1 + 1 + 1 + 0 + bilinear + upper + null + cycle + 3.0e0 + single + + + + + $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc + + + $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.iaf.20120419.nc + + + runoff Forr_rofl + + null + 1 + 1948 + 2009 + 0 + bilinear + upper + null + cycle + 3.0e0 + single + + + + + $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc + + + $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.iaf-AISx00.20120419.nc + + + runoff Forr_rofl + + null + 1 + 1948 + 2009 + 0 + bilinear + upper + null + cycle + 3.0e0 + single + + + + + $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc + + + $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.iaf-AISx45.20120419.nc + + + runoff Forr_rofl + + null + 1 + 1948 + 2009 + 0 + bilinear + upper + null + cycle + 3.0e0 + single + + + + + $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc + + + $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.iaf-AISx55.20120419.nc + + + runoff Forr_rofl + + null + 1 + 1948 + 2009 + 0 + bilinear + upper + null + cycle + 3.0e0 + single + + + + + + + + $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.%y.170807.nc + + + rofl Forr_rofl + rofi Forr_rofi + + null + 1 + 1958 + 2016 + 0 + bilinear + upper + null + cycle + 3.0e0 + single + + + + + + + + $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.%y.170807.nc + + + rofl Forr_rofl + rofi Forr_rofi + + null + 1 + 1958 + 2018 + 0 + bilinear + upper + null + cycle + 3.0e0 + single + + + + + $ROF_DOMAIN_MESH + + + $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.iaf.20120419.nc + + + rofImp_Forr_rofl Forr_rofl + rofImp_Forr_rofi Forr_rofi + + null + $DROF_CPLHIST_YR_ALIGN + $DROF_CPLHIST_YR_START + $DROF_CPLHIST_YR_END + 0 + bilinear + nearest + null + cycle + 3.0e0 + single + + + diff --git a/dwav/cime_config/buildnml b/dwav/cime_config/buildnml index 2cb326ded..92f5d98a8 100755 --- a/dwav/cime_config/buildnml +++ b/dwav/cime_config/buildnml @@ -60,6 +60,7 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path expect(not scol_mode, "for, DWAV single column mode is not allowed") + # Initialize nmlgen nmlgen.init_defaults(infile, config) # Generate dwav_in @@ -67,9 +68,12 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path nmlgen.write_output_file(namelist_file, data_list_path, groups=['dwav_nml']) # Generate dwav.streams.xml - streams = nmlgen.get_streams() - stream_path = os.path.join(confdir, "dwav.streams"+inst_string+".xml" ) - nmlgen.create_nuopc_stream_files(config, caseroot, streams, stream_path, data_list_path) + streamlist = nmlgen.get_streams() + stream_definition_file = os.path.join(_CIMEROOT, "src", "components", + "cdeps", "dwav", "cime_config", "stream_definition_dwav.xml") + streams = StreamCDEPS(stream_definition_file, case) + outfile = os.path.join(confdir, "dwav.streams"+inst_string+".xml" ) + streams.create_stream_xml(streamlist, case, outfile) ############################################################################### def buildnml(case, caseroot, compname): diff --git a/dwav/cime_config/namelist_definition_dwav.xml b/dwav/cime_config/namelist_definition_dwav.xml index 5f5604310..6707ed013 100644 --- a/dwav/cime_config/namelist_definition_dwav.xml +++ b/dwav/cime_config/namelist_definition_dwav.xml @@ -4,26 +4,17 @@ - - strm_year_first is the first year of the stream data that will be used - strm_year_last is the last year of the stream data that will be used - strm_year_align is the model year that will be aligned with stream data for year_first - - For cplhist forcing - the following substitutions will be made below - Replace any instance of the following substring indicators with the appropriate values: - %y => year from the range yearfirst to yearlast - obtained from values of -> below - %ym => year-month from the range yearfirst to yearlast with all 12 months - obtained from values of -> below - %ymd => year-month-day from the range yearfirst to yearlast with all 12 months - obtained from values of -> below - --> - - - - + + char(100) + streams + streams_file + List of streams used for the given dwav_mode. + + climo + + char @@ -37,234 +28,14 @@ Copies all fields directly from the input data streams Any required fields not found on an input stream will be set to zero. Set by the following xml variables in env_run.xml DWAV_MODE - specifies values for wav mode: copyall,null + specifies values for wav mode: copyall copyall - - - - - - char(100) - streams - streams_file - List of streams used for the given dwav_mode. - - climo - - - - - char - streams - streams_file - Stream domain file directory. - - - $DIN_LOC_ROOT/share/meshes/ww3a_120222_ESMFmesh.nc - - - - - - char - streams - streams_file - Stream domain file directory. - - null - - - - - char - streams - streams_file - Stream data file path(s). - - - $DIN_LOC_ROOT/wav/dwav/waveclim.mon.ww3a.150612.nc - - - - - - char - streams - streams_file - Stream data variable name(s). - - - lamult Sw_lamult - ustokes Sw_ustokes - vstokes Sw_vstokes - - - - - - integer - streams - streams_file - Stream offset. - - 0 - - - - - integer - streams - streams_file - Simulation year to align stream to. - - 1 - - - - - integer - streams - streams_file - First year of stream. - - 1 - - - - - integer - streams - streams_file - Last year of stream. - - 1 - - - - - char(30) - streams - streams_file - bilinear,nn - - array (up to 30 elements) of fill algorithms associated with the array of streams - valid values: nn,bilinear - - - bilinear - - - - - char(30) - streams - streams_file - coszen,nearest,linear,lower,upper - - array (up to 30 elements) of time interpolation options associated with the array of - streams. - valid values: lower,upper,nearest,linear,coszen - lower = Use lower time-value - upper = Use upper time-value - nearest = Use the nearest time-value - linear = Linearly interpolate between the two time-values - coszen = Scale according to the cosine of the solar zenith angle (for solar) - - - linear - - - - - char(30) - streams - streams_file - extend,cycle,limit - - array of time axis modes associated with the array of streams for - handling data outside the specified stream time axis. - valid options are to cycle the data based on the first, last, and - align settings associated with the stream dataset, to extend the first - and last valid value indefinitely, or to limit the interpolated data - to fall only between the least and greatest valid value of the time array. - valid values: cycle,extend,limit - extend = extrapolate before and after the period by using the first or last value. - cycle = cycle between the range of data - limit = restrict to the period for which the data is valid - - - cycle - - - - - char(30) - streams - streams_file - single,full_file - - array (up to 30 elements) of reading mode associated with the array of - streams. specifies the mode of reading temporal stream dataset. - valid options are "single" (read temporal dataset one at a time) or - "full_file" (read all entires of temporal dataset in a given netcdf file) - valid values: single,full_file - - - single - - - - - real(30) - streams - streams_file - - array (up to 30 elements) of delta time ratio limits placed on the - time interpolation associated with the array of streams. this real - value causes the model to stop if the ratio of the running maximum - delta time divided by the minimum delta time is greater than the - dtlimit for that stream. for instance, with daily data, the delta - time should be exactly one day throughout the dataset and the computed - maximum divided by minimum delta time should always be 1.0. for - monthly data, the delta time should be between 28 and 31 days and the - maximum ratio should be about 1.1. the running value of the delta - time is computed as data is read and any wraparound or cycling is also - included. this input helps trap missing data or errors in cycling. - to turn off trapping, set the value to 1.0e30 or something similar. - - - 1.5e0 - - - - - char - streams - streams_file - - list of paired colon delimited field names that should be treated as - vectors when carrying out spatial interpolation. unlike other - character arrays in this namelist, this array is completely decoupled - from the list of streams. this is a list of vector pairs that span - all input streams where different fields of the vector pair could - appear in different streams. - for example, vectors = 'u:v','taux:tauy'. - - - null - - - - - - - - + char streams abs diff --git a/dwav/cime_config/stream_definition_dwav.xml b/dwav/cime_config/stream_definition_dwav.xml new file mode 100644 index 000000000..4bcb76870 --- /dev/null +++ b/dwav/cime_config/stream_definition_dwav.xml @@ -0,0 +1,32 @@ + + + + + + + + + $DIN_LOC_ROOT/share/meshes/ww3a_120222_ESMFmesh.nc + + + $DIN_LOC_ROOT/wav/dwav/waveclim.mon.ww3a.150612.nc + + + lamult Sw_lamult + ustokes Sw_ustokes + vstokes Sw_vstokes + + null + 1 + 1 + 1 + 0 + bilinear + linear + null + cycle + 1.5e0 + single + + + From 2023267c4d81bf57a2c63107c5cb178dc82b762b Mon Sep 17 00:00:00 2001 From: Mariana Vertenstein Date: Wed, 19 Aug 2020 13:18:02 -0600 Subject: [PATCH 106/153] changes to fix aux_cdeps tests and bring in stream_cdeps.py and streams_v2.0.xsd into cdeps directory --- cime_config/buildlib | 9 +- cime_config/stream_cdeps.py | 395 +++ cime_config/streams_v2.0.xsd | 216 ++ datm/cime_config/buildnml | 27 +- datm/cime_config/config_component.xml | 4 +- datm/cime_config/namelist_definition_datm.xml | 31 +- datm/cime_config/stream_definition_datm.xml | 2379 ++++++++++++----- dice/cime_config/buildnml | 20 +- dice/cime_config/stream_definition_dice.xml | 42 +- dlnd/cime_config/buildnml | 18 +- dlnd/cime_config/stream_definition_dlnd.xml | 27 +- docn/cime_config/buildnml | 29 +- docn/cime_config/stream_definition_docn.xml | 126 +- drof/cime_config/buildnml | 20 +- drof/cime_config/stream_definition_drof.xml | 242 +- dwav/cime_config/buildnml | 19 +- dwav/cime_config/stream_definition_dwav.xml | 22 +- streams/dshr_stream_mod.F90 | 2 +- 18 files changed, 2777 insertions(+), 851 deletions(-) create mode 100644 cime_config/stream_cdeps.py create mode 100644 cime_config/streams_v2.0.xsd diff --git a/cime_config/buildlib b/cime_config/buildlib index 5ab48bea7..6e0fda1bb 100755 --- a/cime_config/buildlib +++ b/cime_config/buildlib @@ -6,9 +6,14 @@ build cime component model library. This buildlib script is used by all CDEPS import sys, os -_CIMEROOT = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..","..","..","..", "..") +_CIMEROOT = os.environ.get("CIMEROOT") +if _CIMEROOT is None: + raise SystemExit("ERROR: must set CIMEROOT environment variable") sys.path.append(os.path.join(_CIMEROOT, "scripts", "Tools")) +_LIBDIR = os.path.join(_CIMEROOT, "scripts", "Tools") +sys.path.append(_LIBDIR) + from standard_script_setup import * from CIME.buildlib import parse_input from CIME.case import Case @@ -48,7 +53,7 @@ def buildlib(bldroot, libroot, case, compname=None): expect(False, "ERROR in {} build {} {}".format(compname,o,e)) else: logger.info("Running cmake for CDEPS") - srcpath = os.path.join(case.get_value("CIMEROOT"),"src","components","cdeps") + srcpath = os.path.join(case.get_value("SRCROOT"),"components","cdeps") cmake_flags = get_standard_cmake_args(case, os.path.join(sharedpath,"cdeps"), shared_lib=True) ccomp, cxxcomp, fcomp = get_compiler_names(case) diff --git a/cime_config/stream_cdeps.py b/cime_config/stream_cdeps.py new file mode 100644 index 000000000..9f69f6693 --- /dev/null +++ b/cime_config/stream_cdeps.py @@ -0,0 +1,395 @@ +""" +Interface to the streams.xml style files. This class inherits from GenericXML.py + +stream files predate cime and so do not conform to entry id format +""" +import datetime +import re +import hashlib + +from standard_script_setup import * +from CIME.XML.standard_module_setup import * +from CIME.XML.generic_xml import GenericXML +from CIME.XML.files import Files +from CIME.utils import expect + +logger = logging.getLogger(__name__) + +_var_ref_re = re.compile(r"\$(\{)?(?P\w+)(?(1)\})") + +_ymd_re = re.compile(r"%(?P[1-9][0-9]*)?y(?Pm(?Pd)?)?") + +_stream_nuopc_file_template = """ + + {stream_taxmode} + {stream_tintalgo} + {stream_readmode} + {stream_mapalgo} + {stream_dtlimit} + {stream_year_first} + {stream_year_last} + {stream_year_align} + {stream_vectors} + {stream_meshfile} + {stream_lev_dimname} + + {stream_datafiles} + + + {stream_datavars} + + {stream_offset} + + +""" + +class StreamCDEPS(GenericXML): + + def __init__(self, infile, schema): + """ + Initialize a CDEPS stream object + """ + logger.debug("Verifying using schema {}".format(schema)) + GenericXML.__init__(self, infile, schema) + if os.path.exists(infile): + GenericXML.read(self, infile, schema) + + def create_stream_xml(self, stream_names, case, streams_xml_file, data_list_file): + """ + Create the stream xml file and append the required stream input data to the input data list file + """ + # write header of stream file + with open(streams_xml_file, 'w') as stream_file: + stream_file.write('\n') + stream_file.write('\n') + # write contents of stream file + for stream_name in stream_names: + if stream_name: + self.stream_nodes = super(StreamCDEPS,self).get_child("stream_entry", {"name" : stream_name}, + err_msg="No stream_entry {} found".format(stream_name)) + + # determine stream_year_first and stream_year_list + data_year_first,data_year_last = self._get_stream_first_and_last_dates(self.stream_nodes, case) + + # now write the data model streams xml file + stream_vars = {} + stream_vars['streamname'] = stream_name + attributes = {} + for node in self.get_children(root=self.stream_nodes): + node_name = node.xml_element.tag.strip() + + if node_name == 'stream_datavars': + # Get the resolved stream data variables + stream_vars[node_name] = None + for child in self.get_children(root=node): + datavars = child.xml_element.text.strip() + datavars = self._resolve_values(case, datavars) + datavars = self._sub_glc_fields(datavars, case) + datavars = self._add_xml_delimiter(datavars.split("\n"), "var") + if stream_vars[node_name]: + stream_vars[node_name] = stream_vars[node_name] + "\n " + datavars.strip() + else: + stream_vars[node_name] = datavars.strip() + # endif + + elif node_name == 'stream_datafiles': + # Get the resolved stream data files + stream_vars[node_name] = "" + for child in self.get_children(root=node): + stream_datafiles = child.xml_element.text + stream_datafiles = self._resolve_values(case, stream_datafiles) + if 'first_year' in child.xml_element.attrib and 'last_year' in child.xml_element.attrib: + stream_year_first= int(child.xml_element.get('first_year')) + stream_year_last = int(child.xml_element.get('last_year')) + year_first = max(stream_year_first, data_year_first) + year_last = min(stream_year_last, data_year_last) + stream_datafiles = self._sub_paths(stream_datafiles, year_first, year_last) + stream_datafiles = stream_datafiles.strip() + #endif + if stream_vars[node_name]: + stream_vars[node_name] += "\n " + self._add_xml_delimiter(stream_datafiles.split("\n"), "file") + else: + stream_vars[node_name] = self._add_xml_delimiter(stream_datafiles.split("\n"), "file") + + elif ( node_name == 'stream_meshfile' + or node_name == 'stream_mapalgo' + or node_name == 'stream_tintalgo' + or node_name == 'stream_taxmode' + or node_name == 'stream_dtlimit'): + attributes['model_grid'] = case.get_value("GRID") + value = self._get_value_match(node, node_name[7:], attributes=attributes) + value = self._resolve_values(case, value) + value = value.strip() + stream_vars[node_name] = value + + elif node_name.strip(): + # Get the other dependencies + stream_dict = self._add_value_to_dict(stream_vars, case, node) + + # append to stream xml file + stream_file_text = _stream_nuopc_file_template.format(**stream_vars) + with open(streams_xml_file, 'a') as stream_file: + stream_file.write(stream_file_text) + + # append to input_data_list + stream_meshfile = stream_vars['stream_meshfile'].strip() + self._add_entries_to_inputdata_list(stream_meshfile, stream_datafiles, data_list_file) + + # write close of stream xml file + with open(streams_xml_file, 'a') as stream_file: + stream_file.write("\n") + + def _get_stream_first_and_last_dates(self, stream, case): + """ + Get first and last dates for data for the stream file + """ + for node in self.get_children(root=stream): + if node.xml_element.tag == 'stream_year_first': + data_year_first = node.xml_element.text.strip() + data_year_first = int(self._resolve_values(case, data_year_first)) + if node.xml_element.tag == 'stream_year_last': + data_year_last = node.xml_element.text.strip() + data_year_last = int(self._resolve_values(case, data_year_last)) + return data_year_first, data_year_last + + def _add_entries_to_inputdata_list(self, stream_meshfile, stream_datafiles, data_list_file): + """ + Appends input data information entries to input data list file + and writes out the new file + """ + lines_hash = self._get_input_file_hash(data_list_file) + with open(data_list_file, 'a') as input_data_list: + # write out the mesh file separately + string = "mesh = {}\n".format(stream_meshfile) + hashValue = hashlib.md5(string.rstrip().encode('utf-8')).hexdigest() + if hashValue not in lines_hash: + input_data_list.write(string) + # now append the stream_datafile entries + for i, filename in enumerate(stream_datafiles.split("\n")): + if filename.strip() == '': + continue + string = "file{:d} = {}\n".format(i+1, filename) + hashValue = hashlib.md5(string.rstrip().encode('utf-8')).hexdigest() + if hashValue not in lines_hash: + input_data_list.write(string) + + def _get_input_file_hash(self, data_list_file): + """ + Determine a hash for the input data file + """ + lines_hash = set() + if os.path.isfile(data_list_file): + with open(data_list_file, "r") as input_data_list: + for line in input_data_list: + hashValue = hashlib.md5(line.rstrip().encode('utf-8')).hexdigest() + logger.debug( "Found line {} with hash {}".format(line,hashValue)) + lines_hash.add(hashValue) + return lines_hash + + def _get_value_match(self, node, child_name, attributes=None, exact_match=False): + ''' + Get the first best match for multiple tags in child_name based on the + attributes input + + + X + Y + Z + + + ''' + # Store nodes that match the attributes and their scores. + matches = [] + nodes = self.get_children(child_name, root=node) + for vnode in nodes: + # For each node in the list start a score. + score = 0 + if attributes: + for attribute in self.attrib(vnode).keys(): + # For each attribute, add to the score. + score += 1 + # If some attribute is specified that we don't know about, + # or the values don't match, it's not a match we want. + if exact_match: + if attribute not in attributes or \ + attributes[attribute] != self.get(vnode, attribute): + score = -1 + break + else: + if attribute not in attributes or not \ + re.search(self.get(vnode, attribute),attributes[attribute]): + score = -1 + break + + # Add valid matches to the list. + if score >= 0: + matches.append((score, vnode)) + + if not matches: + return None + + # Get maximum score using either a "last" or "first" match in case of a tie + max_score = -1 + mnode = None + for score,node in matches: + # take the *first* best match + if score > max_score: + max_score = score + mnode = node + + return self.text(mnode) + + def _add_value_to_dict(self, stream_dict, case, node): + """ + Adds a value to the input stream dictionary needed for the + stream file output Returns the uppdated stream_dict + """ + name = node.xml_element.tag + value = node.xml_element.text + value = self._resolve_values(case, value) + stream_dict[name] = value + return stream_dict + + def _resolve_values(self, case, value): + """ + Substitues $CASEROOT env_xxx.xml variables if they appear in "value" + Returns a string + """ + match = _var_ref_re.search(value) + while match: + env_val = case.get_value(match.group('name')) + expect(env_val is not None, + "Namelist default for variable {} refers to unknown XML variable {}.". + format(value, match.group('name'))) + value = value.replace(match.group(0), str(env_val), 1) + match = _var_ref_re.search(value) + return value + + def _sub_glc_fields(self, datavars, case): + """Substitute indicators with given values in a list of fields. + + Replace any instance of the following substring indicators with the + appropriate values: + %glc = two-digit GLC elevation class from 00 through glc_nec + + The difference between this function and `_sub_paths` is that this + function is intended to be used for variable names (especially from the + `strm_datvar` defaults), whereas `_sub_paths` is intended for use on + input data file paths. + + Returns a string. + + Example: If `_sub_fields` is called with an array containing two + elements, each of which contains two strings, and glc_nec=3: + foo bar + s2x_Ss_tsrf%glc tsrf%glc + then the returned array will be: + foo bar + s2x_Ss_tsrf00 tsrf00 + s2x_Ss_tsrf01 tsrf01 + s2x_Ss_tsrf02 tsrf02 + s2x_Ss_tsrf03 tsrf03 + """ + lines = datavars.split("\n") + new_lines = [] + for line in lines: + if not line: + continue + if "%glc" in line: + if case.get_value('GLC_NEC') == 0: + glc_nec_indices = [] + else: + glc_nec_indices = range(case.get_value('GLC_NEC')+1) + for i in glc_nec_indices: + new_lines.append(line.replace("%glc", "{:02d}".format(i))) + else: + new_lines.append(line) + return "\n".join(new_lines) + + @staticmethod + def _days_in_month(month, year=1): + """Number of days in the given month (specified as an int, 1-12). + + The `year` argument gives the year for which to request the number of + days, in a Gregorian calendar. Defaults to `1` (not a leap year). + """ + month_start = datetime.date(year, month, 1) + if month == 12: + next_year = year+1 + next_month = 1 + else: + next_year = year + next_month = month + 1 + next_month_start = datetime.date(next_year, next_month, 1) + return (next_month_start - month_start).days + + def _sub_paths(self, filenames, year_start, year_end): + """Substitute indicators with given values in a list of filenames. + + Replace any instance of the following substring indicators with the + appropriate values: + %y = year from the range year_start to year_end + %ym = year-month from the range year_start to year_end with all 12 + months + %ymd = year-month-day from the range year_start to year_end with + all 12 months + + For the date indicators, the year may be prefixed with a number of + digits to use (the default is 4). E.g. `%2ymd` can be used to change the + number of year digits from 4 to 2. + + Note that we assume that there is no mixing and matching of date + indicators, i.e. you cannot use `%4ymd` and `%2y` in the same line. Note + also that we use a no-leap calendar, i.e. every month has the same + number of days every year. + + The difference between this function and `_sub_fields` is that this + function is intended to be used for file names (especially from the + `strm_datfil` defaults), whereas `_sub_fields` is intended for use on + variable names. + + Returns a string (filenames separated by newlines). + """ + lines = [line for line in filenames.split("\n") if line] + new_lines = [] + for line in lines: + match = _ymd_re.search(filenames) + if match is None: + new_lines.append(line) + continue + if match.group('digits'): + year_format = "{:0"+match.group('digits')+"d}" + else: + year_format = "{:04d}" + for year in range(year_start, year_end+1): + if match.group('day'): + for month in range(1, 13): + days = self._days_in_month(month) + for day in range(1, days+1): + date_string = (year_format + "-{:02d}-{:02d}").format(year, month, day) + new_line = line.replace(match.group(0), date_string) + new_lines.append(new_line) + elif match.group('month'): + for month in range(1, 13): + date_string = (year_format + "-{:02d}").format(year, month) + new_line = line.replace(match.group(0), date_string) + new_lines.append(new_line) + else: + date_string = year_format.format(year) + new_line = line.replace(match.group(0), date_string) + new_lines.append(new_line) + return "\n".join(new_lines) + + @staticmethod + def _add_xml_delimiter(list_to_deliminate, delimiter): + expect(delimiter and not " " in delimiter, "Missing or badly formed delimiter") + pred = "<{}>".format(delimiter) + postd = "".format(delimiter) + for n,item in enumerate(list_to_deliminate): + if item.strip(): + list_to_deliminate[n] = pred + item.strip() + postd + #endif + #endfor + return "\n ".join(list_to_deliminate) + + diff --git a/cime_config/streams_v2.0.xsd b/cime_config/streams_v2.0.xsd new file mode 100644 index 000000000..2509cf25c --- /dev/null +++ b/cime_config/streams_v2.0.xsd @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/datm/cime_config/buildnml b/datm/cime_config/buildnml index e7fb72cf8..175fae359 100755 --- a/datm/cime_config/buildnml +++ b/datm/cime_config/buildnml @@ -1,6 +1,6 @@ #!/usr/bin/env python -"""Namelist creator for CIME's data atmosphere model. +"""Namelist creator for CDEPS data atm model. """ # Typically ignore this. @@ -11,8 +11,13 @@ import os, sys -_CIMEROOT = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..","..","..","..","..") -sys.path.append(os.path.join(_CIMEROOT, "scripts", "Tools")) +_CDEPS_CONFIG = os.path.join(os.path.dirname(os.path.abspath(__file__)), os.pardir,os.pardir,"cime_config") +_CIMEROOT = os.environ.get("CIMEROOT") +if _CIMEROOT is None: + raise SystemExit("ERROR: must set CIMEROOT environment variable") +_LIBDIR = os.path.join(_CIMEROOT, "scripts", "Tools") +sys.path.append(_LIBDIR) +sys.path.append(os.path.join(_CDEPS_CONFIG)) from standard_script_setup import * from CIME.case import Case @@ -20,7 +25,7 @@ from CIME.nmlgen import NamelistGenerator from CIME.utils import expect, get_model, safe_copy from CIME.buildnml import create_namelist_infile, parse_input, copy_inputs_to_rundir from CIME.XML.files import Files -from CIME.XML.stream_cdeps import StreamCDEPS +from stream_cdeps import StreamCDEPS logger = logging.getLogger(__name__) @@ -46,7 +51,7 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path datm_presaero = case.get_value("DATM_PRESAERO") datm_co2_tseries = case.get_value("DATM_CO2_TSERIES") atm_grid = case.get_value("ATM_GRID") - grid = case.get_value("GRID") + model_grid = case.get_value("GRID") comp_lnd = case.get_value("COMP_LND") # Check for incompatible options. @@ -64,8 +69,7 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path # Initialize namelist defaults config = {} - config['grid'] = grid - config['atm_grid'] = atm_grid + config['model_grid'] = model_grid config['datm_mode'] = datm_mode config['datm_co2_tseries'] = datm_co2_tseries config['datm_presaero'] = datm_presaero @@ -81,6 +85,7 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path # Determine streams streamlist = nmlgen.get_streams() + print "DEBUG: streamlist is ",streamlist if datm_presaero != "none": streamlist.append("presaero.{}".format(datm_presaero)) if datm_topo != "none": @@ -95,11 +100,11 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path streamlist += anomaly_forcing # Generate datm.streams.xml - stream_definition_file = os.path.join(_CIMEROOT, "src", "components", - "cdeps", "datm", "cime_config", "stream_definition_datm.xml") - streams = StreamCDEPS(stream_definition_file, case) + stream_file = os.path.join(_CDEPS_CONFIG,os.pardir, "datm","cime_config","stream_definition_datm.xml") + schema_file = os.path.join(_CDEPS_CONFIG,"streams_v2.0.xsd") + streams = StreamCDEPS(stream_file, schema_file) outfile = os.path.join(confdir, "datm.streams"+inst_string+".xml" ) - streams.create_stream_xml(streamlist, case, outfile) + streams.create_stream_xml(streamlist, case, outfile, data_list_path) ############################################################################### def buildnml(case, caseroot, compname): diff --git a/datm/cime_config/config_component.xml b/datm/cime_config/config_component.xml index 8fe46cf50..59f5aef4b 100644 --- a/datm/cime_config/config_component.xml +++ b/datm/cime_config/config_component.xml @@ -117,8 +117,8 @@ SSP5-8.5 20tr 20tr - omip - omip + omip.iaf + omip.jra run_component_datm env_run.xml diff --git a/datm/cime_config/namelist_definition_datm.xml b/datm/cime_config/namelist_definition_datm.xml index 9c5cec0e0..a8c420889 100644 --- a/datm/cime_config/namelist_definition_datm.xml +++ b/datm/cime_config/namelist_definition_datm.xml @@ -4,6 +4,9 @@ + + + char(100) streams @@ -25,8 +28,14 @@ CLMNLDAS2.Solar,CLMNLDAS2.Precip,CLMNLDAS2.TPQW - - 1PT + + 1PT.mexicocityMEX + + + 1PT.vancouverCAN + + + 1PT.urbanc_alpha CORE2_NYF.GISS,CORE2_NYF.GXGXS,CORE2_NYF.NCEP @@ -38,7 +47,7 @@ CORE_IAF_JRA.PREC,CORE_IAF_JRA.LWDN,CORE_IAF_JRA.SWDN,CORE_IAF_JRA.Q_10,CORE_IAF_JRA.SLP_,CORE_IAF_JRA.T_10,CORE_IAF_JRA.U_10,CORE_IAF_JRA.V_10,CORE_IAF_JRA.CORE2.ArcFactor CORE_IAF_JRA_1p4_2018.GCGCS.PREC,CORE_IAF_JRA_1p4_2018.GISS.LWDN,CORE_IAF_JRA_1p4_2018.GISS.SWDN,CORE_IAF_JRA_1p4_2018.NCEP.Q_10,CORE_IAF_JRA_1p4_2018.NCEP.SLP_,CORE_IAF_JRA_1p4_2018.NCEP.T_10,CORE_IAF_JRA_1p4_2018.NCEP.U_10,CORE_IAF_JRA_1p4_2018.NCEP.V_10 - + CORE2_IAF.NCEP.DENS.SOFS,CORE2_IAF.NCEP.PSLV.SOFS,CORE2_IAF.PREC.SOFS.DAILY,CORE2_IAF.LWDN.SOFS.DAILY,CORE2_IAF.SWDN.SOFS.DAILY,CORE2_IAF.SWUP.SOFS.DAILY,CORE2_IAF.SHUM.SOFS.6HOUR,CORE2_IAF.TBOT.SOFS.6HOUR,CORE2_IAF.U.SOFS.6HOUR,CORE2_IAF.V.SOFS.6HOUR,CORE2_IAF.CORE2.ArcFactor @@ -57,16 +66,16 @@ CLMNCEP,CORE2_NYF,CORE2_IAF,CORE_IAF_JRA,ERA5,CPLHIST general method that operates on the data. - datamode = "CPLHIST" + ----datamode = "CPLHIST"---- CPLHIST mode will examine the fields found in all input data streams, if any input field names match the field names used internally, they are copied into the export array and passed directly to the coupler without any special user code. Any required fields not found on an input stream will be set to zero except for aerosol deposition fields which will be set to a special value. - datamode = "CORE2_NYF" + ----datamode = "CORE2_NYF"---- Coordinated Ocean-ice Reference Experiments (CORE) Version 2 Normal Year Forcing. - datamode = "CORE2_IAF" + ----datamode = "CORE2_IAF"---- In conjunction with with CORE Version 2 atmospheric forcing data, provides the atmosphere forcing favored by the Ocean Model Working Group when coupling an active ocean model with observed atmospheric @@ -77,16 +86,16 @@ W.G.Large, S.G.Yeager (2008), The global climatology of an interannually varying air-sea flux data set. Clm Dyn doi 10.1007/s00382-008-0441-3. - datamode = "CORE_IAF_JRA" + ----datamode = "CORE_IAF_JRA"---- JRA55 intra-annual year forcing - datamode = "CLMNCEP" + ----datamode = "CLMNCEP"---- In conjunction with NCEP climatological atmosphere data, provides the atmosphere forcing favored by the Land Model Working Group when coupling an active land model with observed atmospheric forcing. This mode replicates code previously found in CLM (circa 2005), before the LMWG started using the CCSM flux coupler and data models to do active-land-only simulations. - datamode = "ERA5" + ----datamode = "ERA5"---- Fifth generation ECMWF atmospheric reanalysis of the global climate @@ -220,7 +229,7 @@ null $DIN_LOC_ROOT/atm/datm7/CORE2/COREv2.correction_factors.T62.121007.nc $DIN_LOC_ROOT/atm/datm7/CORE2/COREv2.correction_factors.T62.121007.nc - null + null @@ -236,7 +245,7 @@ null $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc - null + null diff --git a/datm/cime_config/stream_definition_datm.xml b/datm/cime_config/stream_definition_datm.xml index 81ec9766e..732ab38d3 100644 --- a/datm/cime_config/stream_definition_datm.xml +++ b/datm/cime_config/stream_definition_datm.xml @@ -2,7 +2,7 @@ - + @@ -195,56 +195,78 @@ - $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.GSWP3.0.5d.v1.c170516/clmforc.GSWP3.c2011.0.5x0.5.TPQWL.SCRIP.210520_ESMFmesh.nc + $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.GSWP3.0.5d.v1.c170516/clmforc.GSWP3.c2011.0.5x0.5.TPQWL.SCRIP.210520_ESMFmesh.nc - $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.GSWP3.0.5d.v1.c170516/Solar/clmforc.GSWP3.c2011.0.5x0.5.Solr.%ym.nc + $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.GSWP3.0.5d.v1.c170516/Solar/clmforc.GSWP3.c2011.0.5x0.5.Solr.%ym.nc - FSDS Faxa_swdn + FSDS Faxa_swdn null + + bilinear + nn + + null $DATM_CLMNCEP_YR_ALIGN $DATM_CLMNCEP_YR_START $DATM_CLMNCEP_YR_END 0 - bilinear - linear - null - cycle - 1.5 + + coszen + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.GSWP3.0.5d.v1.c170516/clmforc.GSWP3.c2011.0.5x0.5.TPQWL.SCRIP.210520_ESMFmesh.nc + $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.GSWP3.0.5d.v1.c170516/clmforc.GSWP3.c2011.0.5x0.5.TPQWL.SCRIP.210520_ESMFmesh.nc - $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.GSWP3.0.5d.v1.c170516/Precip/clmforc.GSWP3.c2011.0.5x0.5.Prec.%ym.nc + $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.GSWP3.0.5d.v1.c170516/Precip/clmforc.GSWP3.c2011.0.5x0.5.Prec.%ym.nc PRECTmms Faxa_precn null + + bilinear + nn + + null $DATM_CLMNCEP_YR_ALIGN $DATM_CLMNCEP_YR_START $DATM_CLMNCEP_YR_END 0 - bilinear - null - linear - cycle - 1.5 + + nearest + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.GSWP3.0.5d.v1.c170516/clmforc.GSWP3.c2011.0.5x0.5.TPQWL.SCRIP.210520_ESMFmesh.nc + $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.GSWP3.0.5d.v1.c170516/clmforc.GSWP3.c2011.0.5x0.5.TPQWL.SCRIP.210520_ESMFmesh.nc - $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.GSWP3.0.5d.v1.c170516/TPHWL/clmforc.GSWP3.c2011.0.5x0.5.TPQWL.%ym.nc + $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.GSWP3.0.5d.v1.c170516/TPHWL/clmforc.GSWP3.c2011.0.5x0.5.TPQWL.%ym.nc TBOT Sa_tbot @@ -254,15 +276,26 @@ FLDS Faxa_lwdn null + + bilinear + nn + + null $DATM_CLMNCEP_YR_ALIGN $DATM_CLMNCEP_YR_START $DATM_CLMNCEP_YR_END 0 - bilinear - null - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single @@ -272,61 +305,78 @@ - $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.cruncep_qianFill.0.5d.v7.c160715/clmforc.cruncep.V7.c2016.0.5d.ESMFmesh_260520.nc + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.cruncep_qianFill.0.5d.v7.c160715/clmforc.cruncep.V7.c2016.0.5d.ESMFmesh_260520.nc - $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.cruncep_qianFill.0.5d.v7.c160715/Solar6Hrly/clmforc.cruncep.V7.c2016.0.5d.Solr.%ym.nc + $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.cruncep_qianFill.0.5d.v7.c160715/Solar6Hrly/clmforc.cruncep.V7.c2016.0.5d.Solr.%ym.nc FSDS Faxa_swdn null + + bilinear + nn + + null $DATM_CLMNCEP_YR_ALIGN $DATM_CLMNCEP_YR_START $DATM_CLMNCEP_YR_END 0 - bilinear - null - coszen - cycle - 1.5 + + coszen + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.cruncep_qianFill.0.5d.v7.c160715/clmforc.cruncep.V7.c2016.0.5d.ESMFmesh_260520.nc + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.cruncep_qianFill.0.5d.v7.c160715/clmforc.cruncep.V7.c2016.0.5d.ESMFmesh_260520.nc - - null - - $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.cruncep_qianFill.0.5d.v7.c160715/Precip6Hrly/clmforc.cruncep.V7.c2016.0.5d.Prec.%ym.nc + $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.cruncep_qianFill.0.5d.v7.c160715/Precip6Hrly/clmforc.cruncep.V7.c2016.0.5d.Prec.%ym.nc PRECTmms Faxa_precn + null + + bilinear + nn + + null $DATM_CLMNCEP_YR_ALIGN $DATM_CLMNCEP_YR_START $DATM_CLMNCEP_YR_END 0 - coszen - null - nearest - cycle - 1.5 + + nearest + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.cruncep_qianFill.0.5d.v7.c160715/clmforc.cruncep.V7.c2016.0.5d.ESMFmesh_260520.nc + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.cruncep_qianFill.0.5d.v7.c160715/clmforc.cruncep.V7.c2016.0.5d.ESMFmesh_260520.nc - - null - - $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.cruncep_qianFill.0.5d.v7.c160715/TPHWL6Hrly/clmforc.cruncep.V7.c2016.0.5d.TPQWL.%ym.nc + $DIN_LOC_ROOT_CLMFORC/atm_forcing.datm7.cruncep_qianFill.0.5d.v7.c160715/TPHWL6Hrly/clmforc.cruncep.V7.c2016.0.5d.TPQWL.%ym.nc TBOT Sa_tbot @@ -334,15 +384,27 @@ QBOT Sa_shum PSRF Sa_pbot + null + + bilinear + nn + + null $DATM_CLMNCEP_YR_ALIGN $DATM_CLMNCEP_YR_START $DATM_CLMNCEP_YR_END 0 - bilinear - null - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single @@ -352,7 +414,7 @@ - $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/clmforc.Qian.c2006.T62.ESMFmesh_120620.nc + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/clmforc.Qian.c2006.T62.ESMFmesh_120620.nc $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/Solar6Hrly/clmforc.Qian.c2006.T62.Solr.%ym.nc @@ -361,21 +423,32 @@ FSDS Faxa_swdn null + + bilinear + nn + + null $DATM_CLMNCEP_YR_ALIGN $DATM_CLMNCEP_YR_START $DATM_CLMNCEP_YR_END 0 - bilinear - null - coszen - cycle - 1.5 + + coszen + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/clmforc.Qian.c2006.T62.ESMFmesh_120620.nc + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/clmforc.Qian.c2006.T62.ESMFmesh_120620.nc $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/Precip6Hrly/clmforc.Qian.c2006.T62.Prec.%ym.nc @@ -384,21 +457,32 @@ PRECTmms Faxa_precn null + + bilinear + nn + + null $DATM_CLMNCEP_YR_ALIGN $DATM_CLMNCEP_YR_START $DATM_CLMNCEP_YR_END 0 - bilinear - null - nearest - cycle - 1.5 + + nearest + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/clmforc.Qian.c2006.T62.ESMFmesh_120620.nc + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/clmforc.Qian.c2006.T62.ESMFmesh_120620.nc $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/TmpPrsHumWnd3Hrly/clmforc.Qian.c2006.T62.TPQW.%ym.nc @@ -410,15 +494,26 @@ PSRF Sa_pbot null + + bilinear + nn + + null $DATM_CLMNCEP_YR_ALIGN $DATM_CLMNCEP_YR_START $DATM_CLMNCEP_YR_END 0 - bilinear - null - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single @@ -428,30 +523,41 @@ - $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/clmforc.Qian.c2006.T62.ESMFmesh_120620.nc + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/clmforc.Qian.c2006.T62.ESMFmesh_120620.nc - $DIN_LOC_ROOT/atm/datm7/atm_forcing_iso.datm7.Qian.T62.c080727/Solar6Hrly/clmforc.Qian.c2006.T62.Solr.%ym.nc + $DIN_LOC_ROOT/atm/datm7/atm_forcing_iso.datm7.Qian.T62.c080727/Solar6Hrly/clmforc.Qian.c2006.T62.Solr.%ym.nc - FSDS Faxaswdn + FSDS Faxaswdn null + + bilinear + nn + + null $DATM_CLMNCEP_YR_ALIGN 2000 2004 0 - bilinear - null - coszen - cycle - 1.5 + + coszen + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/clmforc.Qian.c2006.T62.ESMFmesh_120620.nc + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/clmforc.Qian.c2006.T62.ESMFmesh_120620.nc $DIN_LOC_ROOT/atm/datm7/atm_forcing_iso.datm7.Qian.T62.c080727/Precip6Hrly/clmforc.Qian.c2006.T62.Prec.%ym.nc @@ -460,24 +566,35 @@ PRECTmms Faxa_precn null + + bilinear + nn + + null $DATM_CLMNCEP_YR_ALIGN 2000 2004 0 - bilinear - null - nearest - cycle - 1.5 + + nearest + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/clmforc.Qian.c2006.T62.ESMFmesh_120620.nc + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/clmforc.Qian.c2006.T62.ESMFmesh_120620.nc - $DIN_LOC_ROOT/atm/datm7/atm_forcing_iso.datm7.Qian.T62.c080727/TmpPrsHumWnd3Hrly/clmforc.Qian.c2006.T62.TPQW.%ym.nc + $DIN_LOC_ROOT/atm/datm7/atm_forcing_iso.datm7.Qian.T62.c080727/TmpPrsHumWnd3Hrly/clmforc.Qian.c2006.T62.TPQW.%ym.nc TBOT Sa_tbot @@ -486,15 +603,26 @@ PSRF Sa_pbot null + + bilinear + nn + + null $DATM_CLMNCEP_YR_ALIGN 2000 2004 0 - bilinear - null - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single @@ -504,74 +632,107 @@ - $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.NLDAS2.0.125d.v1/ctsmforc.NLDAS2.0.125d.v1.ESMFmesh_120620.nc + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.NLDAS2.0.125d.v1/ctsmforc.NLDAS2.0.125d.v1.ESMFmesh_120620.nc - $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.NLDAS2.0.125d.v1/Solar/ctsmforc.NLDAS2.0.125d.v1.Solr.%ym.nc + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.NLDAS2.0.125d.v1/Solar/ctsmforc.NLDAS2.0.125d.v1.Solr.%ym.nc FSDS Faxa_swdn null + + bilinear + nn + + null $DATM_CLMNCEP_YR_ALIGN $DATM_CLMNCEP_YR_START $DATM_CLMNCEP_YR_END 0 - bilinear - null - coszen - cycle - 1.5 + + coszen + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.NLDAS2.0.125d.v1/ctsmforc.NLDAS2.0.125d.v1.ESMFmesh_120620.nc + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.NLDAS2.0.125d.v1/ctsmforc.NLDAS2.0.125d.v1.ESMFmesh_120620.nc - $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.NLDAS2.0.125d.v1/Precip/ctsmforc.NLDAS2.0.125d.v1.Prec.%ym.nc + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.NLDAS2.0.125d.v1/Precip/ctsmforc.NLDAS2.0.125d.v1.Prec.%ym.nc PRECTmms Faxa_precn null + + bilinear + nn + + null $DATM_CLMNCEP_YR_ALIGN $DATM_CLMNCEP_YR_START $DATM_CLMNCEP_YR_END 0 - bilinear - null - nearest - cycle - 1.5 + + nearest + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.NLDAS2.0.125d.v1/ctsmforc.NLDAS2.0.125d.v1.ESMFmesh_120620.nc + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.NLDAS2.0.125d.v1/ctsmforc.NLDAS2.0.125d.v1.ESMFmesh_120620.nc - $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.NLDAS2.0.125d.v1/TPQWL/ctsmforc.NLDAS2.0.125d.v1.TPQWL.%ym.nc + $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.NLDAS2.0.125d.v1/TPQWL/ctsmforc.NLDAS2.0.125d.v1.TPQWL.%ym.nc - TBOT Sa_tbot - WIND Sa_wind - QBOT Sa_shum - PSRF Sa_pbot - FLDS Faxa_lwdn + TBOT Sa_tbot + WIND Sa_wind + QBOT Sa_shum + PSRF Sa_pbot + FLDS Faxa_lwdn null + + bilinear + nn + + null $DATM_CLMNCEP_YR_ALIGN $DATM_CLMNCEP_YR_START $DATM_CLMNCEP_YR_END 0 - bilinear - null - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single @@ -579,17 +740,91 @@ - + - none + none - - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/mexicocityMEX.c080124/clm1pt-1993-12.nc + + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/mexicocityMEX.c080124/clm1pt-1993-12.nc - + + ZBOT Sa_z + TBOT Sa_tbot + RH Sa_rh + WIND Sa_wind + PSRF Sa_pbot + PRECTmms Faxa_precn + FSDS Faxa_swdn + FSDSdir Faxa_swdndr + FSDSdif Faxa_swdndf + FLDS Faxa_lwdn + + null + + none + + null + $DATM_CLMNCEP_YR_ALIGN + 1993 + 1993 + 0 + + nearest + + + extend + + + 1.e30 + + single + + + + + none + + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/vancouverCAN.c080124/clm1pt-1992-08.nc - + + ZBOT Sa_z + TBOT Sa_tbot + RH Sa_rh + WIND Sa_wind + PSRF Sa_pbot + PRECTmms Faxa_precn + FSDS Faxa_swdn + FSDSdir Faxa_swdndr + FSDSdif Faxa_swdndf + FLDS Faxa_lwdn + + null + + none + + null + $DATM_CLMNCEP_YR_ALIGN + 1992 + 1992 + 0 + + nearest + + + extend + + + 1.e30 + + single + + + + + none + + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0001-08.nc $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0001-09.nc $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/urbanc_alpha.c080416/clm1pt-0001-10.nc @@ -620,19 +855,23 @@ FLDS Faxa_lwdn null + + none + + null $DATM_CLMNCEP_YR_ALIGN - 1993 - 1992 - 0001 - 1993 - 1992 - 0002 + 0001 + 0002 0 - none - null - nearest - extend - 1.e30 + + nearest + + + extend + + + 1.e30 + single @@ -642,7 +881,7 @@ - + $DIN_LOC_ROOT/atm/datm7/bias_correction/precip/gpcp/qian/bias_correction.Prec.%y.nc @@ -651,21 +890,32 @@ BC_PREC Faxa_precsf null + + bilinear + nn + + null 1979 1979 2004 0 - bilinear - null - linear - nearest - 1.5 + + nearest + + + cycle + extend + + + 1.5 + 1.e30 + single - + $DIN_LOC_ROOT/atm/datm7/clm_output/cruncep_precip_1deg/gpcp_1deg_bias_correction/bias_correction.Prec.%y.nc @@ -674,21 +924,32 @@ BC_PREC Faxa_precsf null + + bilinear + nn + + null 1979 1979 2012 0 - bilinear - null - nearest - cycle - 1.5 + + nearest + + + cycle + extend + + + 1.5 + 1.e30 + single - + $DIN_LOC_ROOT/atm/datm7/bias_correction/precip/cmap/cruncep/bias_correction.Prec.%y.nc @@ -697,15 +958,26 @@ BC_PREC Faxa_precsf null + + bilinear + nn + + null 1979 1979 2010 0 - bilinear - null - nearest - cycle - 1.5 + + nearest + + + cycle + extend + + + 1.5 + 1.e30 + single @@ -715,7 +987,7 @@ - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc/domain.permafrostRCN_P2_ESMFmesh_120620.nc + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc/domain.permafrostRCN_P2_ESMFmesh_120620.nc $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.pr.ccsm4.rcp45.2006-2300.nc @@ -724,21 +996,32 @@ pr Faxa_prec_af null + + bilinear + nn + + null 2006 2006 2300 0 - bilinear - null - nearest - cycle - 1.5 + + nearest + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc/domain.permafrostRCN_P2_ESMFmesh_120620.nc + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc/domain.permafrostRCN_P2_ESMFmesh_120620.nc $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.tas.ccsm4.rcp45.2006-2300.nc @@ -747,21 +1030,32 @@ tas Sa_tbot_af null + + bilinear + nn + + null 2006 2006 2300 0 - bilinear - null - nearest - cycle - 1.5 + + nearest + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc/domain.permafrostRCN_P2_ESMFmesh_120620.nc + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc/domain.permafrostRCN_P2_ESMFmesh_120620.nc $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.ps.ccsm4.rcp45.2006-2300.nc @@ -770,21 +1064,32 @@ ps Sa_pbot_af null + + bilinear + nn + + null 2006 2006 2300 0 - bilinear - null - nearest - cycle - 1.5 + + nearest + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc/domain.permafrostRCN_P2_ESMFmesh_120620.nc + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc/domain.permafrostRCN_P2_ESMFmesh_120620.nc $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.huss.ccsm4.rcp45.2006-2300.nc @@ -793,21 +1098,32 @@ huss Sa_shum_af null + + bilinear + nn + + null 2006 2300 2300 0 - bilinear - null - nearest - cycle - 1.5 + + nearest + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc/domain.permafrostRCN_P2_ESMFmesh_120620.nc + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc/domain.permafrostRCN_P2_ESMFmesh_120620.nc $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.uas.ccsm4.rcp45.2006-2300.nc @@ -816,21 +1132,32 @@ uas Sa_u_af null + + bilinear + nn + + null 2006 2006 2300 0 - bilinear - null - nearest - cycle - 1.5 + + nearest + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc/domain.permafrostRCN_P2_ESMFmesh_120620.nc + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc/domain.permafrostRCN_P2_ESMFmesh_120620.nc $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.vas.ccsm4.rcp45.2006-2300.nc @@ -839,21 +1166,32 @@ vas Sa_v_af null + + bilinear + nn + + null 2006 2006 2300 0 - bilinear - null - nearest - cycle - 1.5 + + nearest + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc/domain.permafrostRCN_P2_ESMFmesh_120620.nc + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc/domain.permafrostRCN_P2_ESMFmesh_120620.nc $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.rsds.ccsm4.rcp45.2006-2300.nc @@ -862,21 +1200,32 @@ rsds Faxa_swdn_af null + + bilinear + nn + + null 2006 2006 2300 0 - bilinear - null - nearest - cycle - 1.5 + + nearest + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc/domain.permafrostRCN_P2_ESMFmesh_120620.nc + $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/domain.permafrostRCN_P2.c2013.nc/domain.permafrostRCN_P2_ESMFmesh_120620.nc $DIN_LOC_ROOT/atm/datm7/anomaly_forcing/af.rlds.ccsm4.rcp45.2006-2300.nc @@ -885,15 +1234,26 @@ rlds Faxa_lwdn_af null + + bilinear + nn + + null 2006 2006 2300 0 - bilinear - null - nearest - cycle - 1.5 + + nearest + + + cycle + extend + + + 1.5 + 1.e30 + single @@ -903,7 +1263,7 @@ - $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc $DIN_LOC_ROOT/atm/datm7/NYF/nyf.giss.T62.051007.nc @@ -914,21 +1274,32 @@ swup Faxa_swup null + + bilinear + nn + + u:v 1 1 1 0 - bilinear - u:v - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc $DIN_LOC_ROOT/atm/datm7/NYF/nyf.gxgxs.T62.051007.nc @@ -937,21 +1308,32 @@ prc Faxa_prec null + + bilinear + nn + + u:v 1 1 1 0 - bilinear - u:v - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc $DIN_LOC_ROOT/atm/datm7/NYF/nyf.ncep.T62.050923.nc @@ -965,15 +1347,26 @@ v_10 Sa_v null + + bilinear + nn + + u:v 1 1 1 0 - bilinear - u:v - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single @@ -983,30 +1376,41 @@ - $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc $DIN_LOC_ROOT/ocn/iaf/ncep.SOFS.2010.nc - v + dn10 Sa_dens null + + bilinear + nn + + u:v 1 2010 2011 0 - bilinear - u:v - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc $DIN_LOC_ROOT/ocn/iaf/ncep.SOFS.2010.nc @@ -1015,21 +1419,32 @@ slp_ Sa_pslv null + + bilinear + nn + + u:v 1 2010 2011 0 - bilinear - u:v - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc $DIN_LOC_ROOT/ocn/iaf/SOFS.daily.03-09.2010.nc @@ -1038,21 +1453,32 @@ prec Faxa_prec null + + bilinear + nn + + u:v 1 2010 2011 0 - bilinear - u:v - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc $DIN_LOC_ROOT/ocn/iaf/SOFS.daily.03-09.2010.nc @@ -1061,21 +1487,32 @@ lwdn Faxa_lwdn null + + bilinear + nn + + u:v 1 2010 2011 0 - bilinear - u:v - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc $DIN_LOC_ROOT/ocn/iaf/SOFS.daily.03-09.2010.nc @@ -1084,21 +1521,32 @@ swdn Faxa_swdn null + + bilinear + nn + + u:v 1 2010 2011 0 - bilinear - u:v - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc $DIN_LOC_ROOT/ocn/iaf/SOFS.daily.03-09.2010.nc @@ -1107,21 +1555,32 @@ swup Faxa_swup null + + bilinear + nn + + u:v 1 2010 2011 0 - bilinear - u:v - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc $DIN_LOC_ROOT/ocn/iaf/SOFS.6hour.03-09.2010.nc @@ -1130,21 +1589,32 @@ q3_5 Faxa_shum null + + bilinear + nn + + u:v 1 2010 2011 0 - bilinear - u:v - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc $DIN_LOC_ROOT/ocn/iaf/SOFS.6hour.03-09.2010.nc @@ -1153,21 +1623,32 @@ t3_5 Sa_tbot null + + bilinear + nn + + u:v 1 2010 2011 0 - bilinear - u:v - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc $DIN_LOC_ROOT/ocn/iaf/SOFS.6hour.03-09.2010.nc @@ -1176,21 +1657,32 @@ u3_5 Sa_u null + + bilinear + nn + + u:v 1 2010 2011 0 - bilinear - u:v - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc $DIN_LOC_ROOT/ocn/iaf/SOFS.6hour.03-09.2010.nc @@ -1199,21 +1691,32 @@ v3_5 Sa_v null + + bilinear + nn + + u:v 1 2010 2011 0 - bilinear - u:v - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc $DIN_LOC_ROOT/ocn/iaf/gcgcs.prec.T62.%y.nc @@ -1223,21 +1726,32 @@ prc Faxa_prec null + + bilinear + nn + + u:v 1 1948 2009 0 - bilinear - u:v - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc $DIN_LOC_ROOT/ocn/iaf/giss.lwdn.T62.%y.nc @@ -1247,21 +1761,32 @@ lwdn Faxa_lwdn null + + bilinear + nn + + u:v 1 1948 2009 0 - bilinear - u:v - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc $DIN_LOC_ROOT/ocn/iaf/giss.swdn.T62.%y.nc @@ -1271,21 +1796,32 @@ swdn Faxa_swdn null + + bilinear + nn + + u:v 1 1948 2009 0 - bilinear - u:v - coszen - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc $DIN_LOC_ROOT/ocn/iaf/giss.swup.T62.%y.nc @@ -1295,21 +1831,32 @@ swup Faxa_swup null + + bilinear + nn + + u:v 1 1948 2009 - - bilinear - u:v - linear - cycle - 1.5 + 0 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc $DIN_LOC_ROOT/ocn/iaf/ncep.dn10.T62.%y.nc @@ -1321,21 +1868,32 @@ dn10 Sa_dens null + + bilinear + nn + + u:v 1 1948 2009 0 - bilinear - u:v - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc $DIN_LOC_ROOT/ocn/iaf/ncep.q_10.T62.%y.nc @@ -1347,21 +1905,32 @@ q_10 Sa_shum null + + bilinear + nn + + u:v 1 1948 2009 0 - bilinear - u:v - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc $DIN_LOC_ROOT/ocn/iaf/ncep.slp_.T62.%y.nc @@ -1373,21 +1942,32 @@ slp_ Sa_pslv null + + bilinear + nn + + u:v 1 1948 2009 0 - bilinear - u:v - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc $DIN_LOC_ROOT/ocn/iaf/ncep.t_10.T62.%y.nc @@ -1399,21 +1979,32 @@ t_10 Sa_tbot null + + bilinear + nn + + u:v 1 1948 2009 0 - bilinear - u:v - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc $DIN_LOC_ROOT/ocn/iaf/ncep.u_10.T62.%y.nc @@ -1425,21 +2016,32 @@ u_10 Sa_u null + + bilinear + nn + + u:v 1 1948 2009 0 - bilinear - u:v - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc $DIN_LOC_ROOT/ocn/iaf/ncep.v_10.T62.%y.nc @@ -1451,21 +2053,32 @@ v_10 Sa_v null + + bilinear + nn + + u:v 1 1948 2009 0 - bilinear - u:v - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc $DIN_LOC_ROOT/atm/datm7/CORE2/CORE2.t_10.ArcFactor.T62.1997-2004.nc @@ -1474,15 +2087,25 @@ TarcFactor tarcf null + + bilinear + nn + + u:v 1 1948 2009 0 - bilinear - u:v - linear - cycle - 1.e30 + + linear + + + cycle + extend + + + 1.e30 + single @@ -1490,21 +2113,8 @@ - - - - - - - - - - - - - - - + + @@ -1513,7 +2123,7 @@ - $DIN_LOC_ROOT/share/meshes/TL319_151007_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/TL319_151007_ESMFmesh.nc $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.prec.TL319.%y.171019.nc @@ -1522,21 +2132,32 @@ prec Faxa_prec null + + bilinear + nn + + u:v 1 1958 2016 0 - bilinear - u:v - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/TL319_151007_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/TL319_151007_ESMFmesh.nc $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.lwdn.TL319.%y.171019.nc @@ -1545,21 +2166,32 @@ lwdn Faxa_lwdn null + + bilinear + nn + + u:v 1 1958 2016 0 - bilinear - u:v - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/TL319_151007_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/TL319_151007_ESMFmesh.nc $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.swdn.TL319.%y.171019.nc @@ -1568,21 +2200,32 @@ swdn Faxa_swdn null + + bilinear + nn + + u:v 1 1958 2016 -5400 - bilinear - u:v - linear - cycle - 1.5 + + coszen + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/TL319_151007_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/TL319_151007_ESMFmesh.nc $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.q_10.TL319.%y.171019.nc @@ -1591,21 +2234,32 @@ q_10 Sa_shum null + + bilinear + nn + + u:v 1 1958 2016 0 - bilinear - u:v - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/TL319_151007_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/TL319_151007_ESMFmesh.nc $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.slp.TL319.%y.171019.nc @@ -1614,21 +2268,32 @@ slp Sa_pslv null + + bilinear + nn + + u:v 1 1958 2016 0 - bilinear - u:v - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/TL319_151007_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/TL319_151007_ESMFmesh.nc $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.t_10.TL319.%y.171019.nc @@ -1637,21 +2302,32 @@ t_10 Sa_tbot null + + bilinear + nn + + u:v 1 1958 2016 0 - bilinear - u:v - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - + - $DIN_LOC_ROOT/share/meshes/TL319_151007_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/TL319_151007_ESMFmesh.nc $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.u_10.TL319.%y.171019.nc @@ -1660,21 +2336,32 @@ u_10 Sa_u null + + bilinear + nn + + u:v 1 1958 2016 0 - bilinear - u:v - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - + - $DIN_LOC_ROOT/share/meshes/TL319_151007_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/TL319_151007_ESMFmesh.nc $DIN_LOC_ROOT/ocn/jra55/v1.3_noleap/JRA.v1.3.v_10.TL319.%y.171019.nc @@ -1683,21 +2370,32 @@ v_10 Sa_v null + + bilinear + nn + + u:v 1 1958 2016 0 - bilinear - u:v - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc + $DIN_LOC_ROOT/share/meshes/T62_040121_ESMFmesh_c20190714.nc $DIN_LOC_ROOT/atm/datm7/CORE2/CORE2.t_10.ArcFactor.T62.1997-2004.nc @@ -1706,15 +2404,25 @@ TarcFactor tarcf null + + bilinear + nn + + u:v 1 1958 2016 0 - bilinear - u:v - linear - cycle - 1.e30 + + linear + + + cycle + extend + + + 1.e30 + single @@ -1724,7 +2432,7 @@ - $DIN_LOC_ROOT/share/meshes/TL639_200618_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/TL639_200618_ESMFmesh.nc $DIN_LOC_ROOT/atm/datm7/ERA5/ERA5.TL639.2019.01.200618.nc @@ -1767,15 +2475,27 @@ nsss Faxa_tauy null + + bilinear + nn + + + u:v 1900 2019 2019 0 - bilinear - u:v, taux:tauy - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single @@ -1787,7 +2507,7 @@ - none + none $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_global_simyr_1750-2014_CMIP6_c180929.nc @@ -1796,45 +2516,99 @@ CO2 Sa_co2diag null + + none + nn + + null 1850 1850 2014 0 - none + + linear + + + extend + extend + + + 1.e30 + + single + + + + + none + + + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_global_ssp585_simyr_1750-2020_CMIP6_c200324.nc + + + CO2 Sa_co2diag + + null + + none + nn + null - linear - extend - 1.e30 + 213 + 1850 + 2010 + 0 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - + - none + none - fco2_datm_global_ssp585_simyr_1750-2020_CMIP6_c200324.nc + $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_global_ssp585_simyr_1750-2020_CMIP6_c200324.nc CO2 Sa_co2diag null - 213 - 198 + + none + nn + + null + 198 1850 2019 0 - bilinear - null - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - none + none $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP1-1.9_simyr_2014-2500_CMIP6_c190514.nc @@ -1843,21 +2617,31 @@ CO2 Sa_co2diag null + + none + nn + + null 2015 2015 2500 0 - bilinear - null - linear - extend - 1.e30 + + linear + + + extend + extend + + + 1.e30 + single - none + none $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP1-2.6__simyr_2014-2500_CMIP6_c190506.nc @@ -1866,21 +2650,31 @@ CO2 Sa_co2diag null + + none + nn + + null 2015 2015 2500 0 - bilinear - null - linear - extend - 1.e30 + + linear + + + extend + extend + + + 1.e30 + single - none + none $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP2-4.5__simyr_2014-2500_CMIP6_c190506.nc @@ -1889,46 +2683,64 @@ CO2 Sa_co2diag null + + none + nn + + null 2015 2015 2500 0 - bilinear - null - linear - extend - 1.e30 + + linear + + + extend + extend + + + 1.e30 + single - none + none - - null - $DIN_LOC_ROOT/atm/datm7/CO2/co2_datm_lat-bandsSSP3-7.0__simyr_2014-2500_CMIP6_c190506.nc CO2 Sa_co2diag + null + + none + nn + + null 2015 2015 2500 0 - bilinear - null - linear - extend - 1.e30 + + linear + + + extend + extend + + + 1.e30 + single - none + none $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP4-3.4_simyr_2014-2500_CMIP6_c190514.nc @@ -1937,21 +2749,31 @@ CO2 Sa_co2diag null + + none + nn + + null 2015 2015 2500 0 - bilinear - null - linear - extend - 1.e30 + + linear + + + extend + extend + + + 1.e30 + single - none + none $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP4-6.0__simyr_2014-2500_CMIP6_c190506.nc @@ -1960,21 +2782,31 @@ CO2 Sa_co2diag null + + none + nn + + null 2015 2015 2500 0 - bilinear - null - linear - extend - 1.e30 + + linear + + + extend + extend + + + 1.e30 + single - none + none $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP5-3.4__simyr_2014-2500_CMIP6_c190506.nc @@ -1983,21 +2815,31 @@ CO2 Sa_co2diag null + + none + nn + + null 2015 2015 2500 0 - bilinear - null - linear - extend - 1.e30 + + linear + + + extend + extend + + + 1.e30 + single - none + none $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_lat-bandsSSP5-8.5__simyr_2014-2500_CMIP6_c190506.nc @@ -2006,21 +2848,31 @@ CO2 Sa_co2diag null + + none + nn + + null 2015 2015 2500 0 - bilinear - null - linear - extend - 1.e30 + + linear + + + extend + extend + + + 1.e30 + single - none + none $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP1-1.9_simyr_2014-2501_CMIP6_c190514.nc @@ -2029,21 +2881,31 @@ CO2 Sa_co2diag null + + none + nn + + null 2015 2015 2500 0 - bilinear - null - linear - extend - 1.e30 + + linear + + + extend + extend + + + 1.e30 + single - none + none $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP1-2.6__simyr_2014-2501_CMIP6_c190506.nc @@ -2052,21 +2914,31 @@ CO2 Sa_co2diag null + + none + nn + + null 2015 2015 2500 0 - bilinear - null - linear - extend - 1.e30 + + linear + + + extend + extend + + + 1.e30 + single - none + none $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP2-4.5__simyr_2014-2501_CMIP6_c190506.nc @@ -2075,21 +2947,31 @@ CO2 Sa_co2diag null + + none + nn + + null 2015 2015 2500 0 - bilinear - null - linear - extend - 1.e30 + + linear + + + extend + extend + + + 1.e30 + single - none + none $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP3-7.0__simyr_2014-2501_CMIP6_c190506.nc @@ -2098,21 +2980,31 @@ CO2 Sa_co2diag null + + none + nn + + null 2015 2015 2500 0 - bilinear - null - linear - extend - 1.e30 + + linear + + + extend + extend + + + 1.e30 + single - none + none $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP4-3.4_simyr_2014-2501_CMIP6_c190514.nc @@ -2121,21 +3013,31 @@ CO2 Sa_co2diag null + + none + nn + + null 2015 2015 2500 0 - bilinear - null - linear - extend - 1.e30 + + linear + + + extend + extend + + + 1.e30 + single - none + none $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP4-6.0__simyr_2014-2501_CMIP6_c190506.nc @@ -2144,21 +3046,31 @@ CO2 Sa_co2diag null + + none + nn + + null 2015 2015 2500 0 - bilinear - null - linear - extend - 1.e30 + + linear + + + extend + extend + + + 1.e30 + single - none + none $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP5-3.4__simyr_2014-2501_CMIP6_c190506.nc @@ -2167,21 +3079,31 @@ CO2 Sa_co2diag null + + none + nn + + null 2015 2015 2500 0 - bilinear - null - linear - extend - 1.e30 + + linear + + + extend + extend + + + 1.e30 + single - none + none $DIN_LOC_ROOT/atm/datm7/CO2/fco2_datm_globalSSP5-8.5__simyr_2014-2501_CMIP6_c190506.nc @@ -2190,15 +3112,25 @@ CO2 Sa_co2diag null + + none + nn + + null 2015 2015 2500 0 - bilinear - null - linear - extend - 1.e30 + + linear + + + extend + extend + + + 1.e30 + single @@ -2208,7 +3140,7 @@ - $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc @@ -2230,21 +3162,33 @@ DSTX04DD Faxa_dstdry4 null + + bilinear + nn + nn + + null 1 - $DATM_CPLHIST_YR_START - $DATM_CPLHIST_YR_END + 1850 + 1850 0 - bilinear - null - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc @@ -2266,21 +3210,33 @@ DSTX04DD Faxa_dstdry4 null + + bilinear + nn + nn + + null 1 2000 2000 0 - bilinear - null - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc @@ -2302,21 +3258,33 @@ DSTX04DD Faxa_dstdry4 null + + bilinear + nn + nn + + null 1 2010 2010 0 - bilinear - null - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerosoldep_WACCM.ensmean_monthly_hist_1849-2015_0.9x1.25_CMIP6_c180926.nc @@ -2338,21 +3306,32 @@ DSTX04DD Faxa_dstdry4 null + + bilinear + nn + + null 1849 1849 2014 0 - bilinear - null - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerodep_clm_SSP126_b.e21.BSSP126cmip6.f09_g17.CMIP6-SSP1-2.6.001_2014-2101_monthly_0.9x1.25_c190523.nc @@ -2374,21 +3353,32 @@ DSTX04DD Faxa_dstdry4 null + + bilinear + nn + + null 2015 2015 2101 0 - bilinear - null - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerodep_clm_SSP245_b.e21.BWSSP245cmip6.f09_g17.CMIP6-SSP2-4.5-WACCM.001_2014-2101_monthly_0.9x1.25_c190401.nc @@ -2410,21 +3400,32 @@ DSTX04DD Faxa_dstdry4 null + + bilinear + nn + + null 2015 2015 2101 0 - bilinear - null - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerodep_clm_SSP370_b.e21.BWSSP370cmip6.f09_g17.CMIP6-SSP3-7.0-WACCM.001_2014-2101_monthly_0.9x1.25_c190402.nc @@ -2446,21 +3447,31 @@ DSTX04DD Faxa_dstdry4 null + + bilinear + nn + + null 2015 2015 2101 0 - bilinear - null - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + single - $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc null @@ -2482,21 +3493,32 @@ DSTX04DD Faxa_dstdry4 null + + bilinear + nn + + null 2015 2015 2101 0 - bilinear - null - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + 1.e30 + single - $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc $DIN_LOC_ROOT/atm/cam/chem/trop_mozart_aero/aero/aerodep_clm_SSP585_b.e21.BSSP585cmip6.f09_g17.CMIP6-SSP5-8.5.001_2014-2101_monthly_0.9x1.25_c190419.nc @@ -2518,15 +3540,25 @@ DSTX04DD Faxa_dstdry4 null + + bilinear + nn + + null 2015 2015 2101 0 - bilinear - null - linear - cycle - 1.5 + + linear + + + cycle + extend + + + 1.5 + single @@ -2536,29 +3568,39 @@ - $ATM_DOMAIN_MESH + $ATM_DOMAIN_MESH $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x3h.%ym.nc - + a2x3h_Sa_topo Sa_topo null + + bilinear + nn + + null $DATM_CPLHIST_YR_ALIGN $DATM_CPLHIST_YR_START $DATM_CPLHIST_YR_END 0 - bilinear - null - nearest - cycle - 3.0 + + nearest + + + cycle + extend + + + 3.0 + single - $ATM_DOMAIN_MESH + $ATM_DOMAIN_MESH $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x1d.%ym.nc @@ -2580,21 +3622,31 @@ a2x1d_Faxa_dstdry4 Faxa_dstdry4 null + + bilinear + nn + + null $DATM_CPLHIST_YR_ALIGN $DATM_CPLHIST_YR_START $DATM_CPLHIST_YR_END 0 - bilinear - null - nearest - cycle - 3.0 + + nearest + + + cycle + extend + + + 3.0 + single - $ATM_DOMAIN_MESH + $ATM_DOMAIN_MESH $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x1hi.%ym.nc @@ -2606,21 +3658,31 @@ a2x1hi_Faxa_swvdf Faxa_swvdf null + + bilinear + nn + + null $DATM_CPLHIST_YR_ALIGN $DATM_CPLHIST_YR_START $DATM_CPLHIST_YR_END 2700 - bilinear - null - coszen - cycle - 3.0 + + nearest + + + cycle + extend + + + 3.0 + single - $ATM_DOMAIN_MESH + $ATM_DOMAIN_MESH $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x3h.%ym.nc @@ -2633,21 +3695,31 @@ a2x3h_Faxa_lwdn Faxa_lwdn null + + bilinear + nn + + null $DATM_CPLHIST_YR_ALIGN $DATM_CPLHIST_YR_START $DATM_CPLHIST_YR_END 900 - nearest - null - linear - cycle - 3.0 + + nearest + + + cycle + extend + + + 3.0 + single - $ATM_DOMAIN_MESH + $ATM_DOMAIN_MESH $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x3h.%ym.nc @@ -2664,21 +3736,31 @@ a2x3h_Sa_co2prog Sa_co2prog null + + bilinear + nn + + null $DATM_CPLHIST_YR_ALIGN $DATM_CPLHIST_YR_START $DATM_CPLHIST_YR_END 900 - bilinear - null - linear - cycle - 3.0 + + linear + + + cycle + extend + + + 3.0 + single - $ATM_DOMAIN_MESH + $ATM_DOMAIN_MESH $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x1h.%ym.nc @@ -2688,15 +3770,25 @@ a2x1h_Sa_v Sa_v null + + bilinear + nn + + null $DATM_CPLHIST_YR_ALIGN $DATM_CPLHIST_YR_START $DATM_CPLHIST_YR_END 900 - bilinear - null - linear - cycle - 3.0 + + linear + + + cycle + extend + + + 3.0 + single @@ -2706,7 +3798,7 @@ - $DIN_LOC_ROOT/atm/datm7/topo_forcing/topodata_0.9x1.SCRIP.210520_ESMFmesh.nc + $DIN_LOC_ROOT/atm/datm7/topo_forcing/topodata_0.9x1.SCRIP.210520_ESMFmesh.nc $DIN_LOC_ROOT/atm/datm7/topo_forcing/topodata_0.9x1.25_USGS_070110_stream_c151201.nc @@ -2715,19 +3807,30 @@ TOPO Sa_topo null + + bilinear + nn + + null 1 1 1 0 - bilinear - null - - lower - cycle - 1.5 + + + + + + lower + + + cycle + extend + + + 1.5 + 1.e30 + single diff --git a/dice/cime_config/buildnml b/dice/cime_config/buildnml index 6f0bc96b6..02cb72fd6 100755 --- a/dice/cime_config/buildnml +++ b/dice/cime_config/buildnml @@ -1,6 +1,6 @@ #!/usr/bin/env python -"""Namelist creator for CIME's data ice model. +"""Namelist creator for CDEPS data ice model. """ # Typically ignore this. @@ -11,8 +11,13 @@ import os, sys -_CIMEROOT = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..","..","..","..","..") -sys.path.append(os.path.join(_CIMEROOT, "scripts", "Tools")) +_CDEPS_CONFIG = os.path.join(os.path.dirname(os.path.abspath(__file__)), os.pardir,os.pardir,"cime_config") +_CIMEROOT = os.environ.get("CIMEROOT") +if _CIMEROOT is None: + raise SystemExit("ERROR: must set CIMEROOT environment variable") +_LIBDIR = os.path.join(_CIMEROOT, "scripts", "Tools") +sys.path.append(_LIBDIR) +sys.path.append(os.path.join(_CDEPS_CONFIG)) from standard_script_setup import * from CIME.case import Case @@ -20,6 +25,7 @@ from CIME.XML.files import Files from CIME.nmlgen import NamelistGenerator from CIME.utils import expect, safe_copy from CIME.buildnml import create_namelist_infile, parse_input, copy_inputs_to_rundir +from stream_cdeps import StreamCDEPS logger = logging.getLogger(__name__) @@ -71,11 +77,11 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path # Generate dice.streams.xml streamlist = nmlgen.get_streams() - stream_definition_file = os.path.join(_CIMEROOT, "src", "components", - "cdeps", "dice", "cime_config", "stream_definition_dice.xml") - streams = StreamCDEPS(stream_definition_file, case) + stream_file = os.path.join(_CDEPS_CONFIG,os.pardir, "dice","cime_config","stream_definition_dice.xml") + schema_file = os.path.join(_CDEPS_CONFIG,"streams_v2.0.xsd") + streams = StreamCDEPS(stream_file, schema_file) outfile = os.path.join(confdir, "dice.streams"+inst_string+".xml" ) - streams.create_stream_xml(streamlist, case, outfile) + streams.create_stream_xml(streamlist, case, outfile, data_list_path) ############################################################################### def buildnml(case, caseroot, compname): diff --git a/dice/cime_config/stream_definition_dice.xml b/dice/cime_config/stream_definition_dice.xml index 6d4b99945..553065ab4 100644 --- a/dice/cime_config/stream_definition_dice.xml +++ b/dice/cime_config/stream_definition_dice.xml @@ -2,11 +2,11 @@ - + - $DIN_LOC_ROOT/ice/dice7/SSMI/ssmi.ifrac.0.5x0.5_ESMFmesh_120520.nc + $DIN_LOC_ROOT/ice/dice7/SSMI/ssmi.ifrac.0.5x0.5_ESMFmesh_120520.nc $DIN_LOC_ROOT/ice/dice7/SSMI/ssmi_ifrac.clim.x0.5.090319.nc @@ -15,21 +15,29 @@ ifrac Si_ifrac null + + bilinear + + null 1 1 1 0 - bilinear - linear - null - cycle - 1.5e0 + + linear + + + cycle + + + 1.5 + single - $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5_ESMFmesh_120520.nc + $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5_ESMFmesh_120520.nc $DIN_LOC_ROOT/ocn/iaf/ssmi.ifrac.0.5x0.5.%y.nc @@ -39,15 +47,23 @@ ifrac Si_ifrac null + + bilinear + + null 1 1948 2009 0 - bilinear - linear - null - cycle - 1.5 + + linear + + + cycle + + + 1.5 + single diff --git a/dlnd/cime_config/buildnml b/dlnd/cime_config/buildnml index 0832237ba..6975c1847 100755 --- a/dlnd/cime_config/buildnml +++ b/dlnd/cime_config/buildnml @@ -11,8 +11,13 @@ import os, sys -_CIMEROOT = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..","..","..","..","..") -sys.path.append(os.path.join(_CIMEROOT, "scripts", "Tools")) +_CDEPS_CONFIG = os.path.join(os.path.dirname(os.path.abspath(__file__)), os.pardir,os.pardir,"cime_config") +_CIMEROOT = os.environ.get("CIMEROOT") +if _CIMEROOT is None: + raise SystemExit("ERROR: must set CIMEROOT environment variable") +_LIBDIR = os.path.join(_CIMEROOT, "scripts", "Tools") +sys.path.append(_LIBDIR) +sys.path.append(os.path.join(_CDEPS_CONFIG)) from standard_script_setup import * from CIME.case import Case @@ -20,6 +25,7 @@ from CIME.nmlgen import NamelistGenerator from CIME.utils import expect, safe_copy from CIME.XML.files import Files from CIME.buildnml import create_namelist_infile, parse_input, copy_inputs_to_rundir +from CIME.XML.stream_cdeps import StreamCDEPS logger = logging.getLogger(__name__) @@ -71,11 +77,11 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path # Generate dlnd.streams.xml streamlist = nmlgen.get_streams() - stream_definition_file = os.path.join(_CIMEROOT, "src", "components", - "cdeps", "dlnd", "cime_config", "stream_definition_dlnd.xml") - streams = StreamCDEPS(stream_definition_file, case) + stream_file = os.path.join(_CDEPS_CONFIG,os.pardir, "dlnd","cime_config","stream_definition_dlnd.xml") + schema_file = os.path.join(_CDEPS_CONFIG,"streams_v2.0.xsd") + streams = StreamCDEPS(stream_file, schema_file) outfile = os.path.join(confdir, "dlnd.streams"+inst_string+".xml" ) - streams.create_stream_xml(streamlist, case, outfile) + streams.create_stream_xml(streamlist, case, outfile, data_list_path) ############################################################################### def buildnml(case, caseroot, compname): diff --git a/dlnd/cime_config/stream_definition_dlnd.xml b/dlnd/cime_config/stream_definition_dlnd.xml index ec50e7a1b..74ec272fe 100644 --- a/dlnd/cime_config/stream_definition_dlnd.xml +++ b/dlnd/cime_config/stream_definition_dlnd.xml @@ -2,9 +2,6 @@ - - - + + - $LND_DOMAIN_MESH + $LND_DOMAIN_MESH - $DLND_CPLHIST_DIR/$DLND_CPLHIST_CASE.cpl.hl2x1yr_glc.%y-01-01.nc + $DLND_CPLHIST_DIR/$DLND_CPLHIST_CASE.cpl.hl2x1yr_glc.%y-01-01.nc l2x1yr_glc_Sl_tsrf%glc Sl_tsrf_elev%glc @@ -28,15 +27,23 @@ l2x1yr_glc_Flgl_qice%glc Flgl_qice_elev%glc null + + bilinear + + null $DLND_CPLHIST_YR_ALIGN $DLND_CPLHIST_YR_START $DLND_CPLHIST_YR_END 0 - bilinear - lower - null - cycle - 1.5e0 + + lower + + + cycle + + + 1.5 + single diff --git a/docn/cime_config/buildnml b/docn/cime_config/buildnml index 4a632b9e5..8720f565d 100755 --- a/docn/cime_config/buildnml +++ b/docn/cime_config/buildnml @@ -1,6 +1,6 @@ #!/usr/bin/env python -"""Namelist creator for CIME's data ocn model. +"""Namelist creator for CDEPS data ocn model. """ # Typically ignore this. @@ -11,8 +11,13 @@ import os, sys, re -_CIMEROOT = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..","..","..","..","..") -sys.path.append(os.path.join(_CIMEROOT, "scripts", "Tools")) +_CDEPS_CONFIG = os.path.join(os.path.dirname(os.path.abspath(__file__)), os.pardir,os.pardir,"cime_config") +_CIMEROOT = os.environ.get("CIMEROOT") +if _CIMEROOT is None: + raise SystemExit("ERROR: must set CIMEROOT environment variable") +_LIBDIR = os.path.join(_CIMEROOT, "scripts", "Tools") +sys.path.append(_LIBDIR) +sys.path.append(os.path.join(_CDEPS_CONFIG)) from standard_script_setup import * from CIME.case import Case @@ -41,14 +46,12 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path caseroot = case.get_value("CASEROOT") docn_mode = case.get_value("DOCN_MODE") - ocn_domain_file = case.get_value("OCN_DOMAIN_FILE") - ocn_domain_path = case.get_value("OCN_DOMAIN_PATH") ocn_grid = case.get_value("OCN_GRID") ocn_nx = case.get_value("OCN_NX") ocn_ny = case.get_value("OCN_NY") atm_nx = case.get_value("ATM_NX") atm_ny = case.get_value("ATM_NY") - grid = case.get_value("GRID") + model_grid = case.get_value("GRID") # Check for incompatible options. expect(ocn_grid != "null", @@ -60,7 +63,7 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path # Initialize namelist defaults config = {} - config['grid'] = grid + config['model_grid'] = model_grid config['ocn_grid'] = ocn_grid config['docn_mode'] = docn_mode config['create_mesh'] = 'true' if case.get_value("OCN_DOMAIN_MESH") == 'create_mesh' else 'false' @@ -79,15 +82,15 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path generate_stream_file = False else: generate_stream_file = True + #endif if generate_stream_file: - # Create the list of streams streamlist = nmlgen.get_streams() - # Create stream xml file - docn.streams.xml - stream_definition_file = os.path.join(_CIMEROOT, "src", "components", - "cdeps", "docn", "cime_config", "stream_definition_docn.xml") - streams = StreamCDEPS(stream_definition_file, case) + stream_file = os.path.join(_CDEPS_CONFIG,os.pardir, "docn","cime_config","stream_definition_docn.xml") + schema_file = os.path.join(_CDEPS_CONFIG,"streams_v2.0.xsd") + streams = StreamCDEPS(stream_file, schema_file) outfile = os.path.join(confdir, "docn.streams"+inst_string+".xml" ) - streams.create_stream_xml(streamlist, case, outfile) + streams.create_stream_xml(streamlist, case, outfile, data_list_path) + #endif ############################################################################### def buildnml(case, caseroot, compname): diff --git a/docn/cime_config/stream_definition_docn.xml b/docn/cime_config/stream_definition_docn.xml index 9a5e39da0..a1be32f34 100644 --- a/docn/cime_config/stream_definition_docn.xml +++ b/docn/cime_config/stream_definition_docn.xml @@ -2,17 +2,17 @@ - + - - $DIN_LOC_ROOT/share/meshes/T31_040122_ESMFmesh.nc - $DIN_LOC_ROOT/share/meshes/fv1.9x2.5_141008_ESMFmesh.nc - $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc - $DIN_LOC_ROOT/share/meshes/fv0.47x0.63_141008_ESMFmesh.nc - - $DIN_LOC_ROOT/share/meshes/fv4x5_050615_polemod_ESMFmesh.nc - $DIN_LOC_ROOT/atm/cam/sst/sst_HadOIBl_bc_1x1_clim_c101029_ESMFmesh_120520.nc + + $DIN_LOC_ROOT/share/meshes/T31_040122_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/fv1.9x2.5_141008_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/fv0.47x0.63_141008_ESMFmesh.nc + + $DIN_LOC_ROOT/share/meshes/fv4x5_050615_polemod_ESMFmesh.nc + $DIN_LOC_ROOT/atm/cam/sst/sst_HadOIBl_bc_1x1_clim_c101029_ESMFmesh_120520.nc $SSTICE_DATA_FILENAME @@ -21,21 +21,29 @@ SST_cpl So_t null + + bilinear + + null $SSTICE_YEAR_ALIGN $SSTICE_YEAR_START $SSTICE_YEAR_END 0 - bilinear - linear - null - cycle - 1.5 + + linear + + + cycle + + + 1.5 + single - $DIN_LOC_ROOT/atm/cam/sst/sst_HadOIBl_bc_1x1_clim_c101029_ESMFmesh_120520.nc + $DIN_LOC_ROOT/atm/cam/sst/sst_HadOIBl_bc_1x1_clim_c101029_ESMFmesh_120520.nc $DIN_LOC_ROOT/atm/cam/sst/sst_HadOIBl_bc_1x1_1850_2014_c150416.nc @@ -44,21 +52,29 @@ SST_cpl So_t null + + bilinear + + null 1 1850 2014 0 - bilinear - linear - null - cycle - 1.5e0 + + linear + + + cycle + + + 1.5 + single - $DIN_LOC_ROOT/ocn/docn7/SOM/pop_frc.1x1d.SCRIP.030620_ESMFmesh.nc + $DIN_LOC_ROOT/ocn/docn7/SOM/pop_frc.1x1d.SCRIP.030620_ESMFmesh.nc $DIN_LOC_ROOT/ocn/docn7/SOM/pop_frc.1x1d.090130.nc @@ -74,27 +90,35 @@ qdp So_qbot null + + bilinear + + null 1 1 1 0 - bilinear - linear - null - cycle - 1.5 + + linear + + + cycle + + + 1.5 + single - $DIN_LOC_ROOT/share/meshes/fv1.9x2.5_141008_ESMFmesh.nc - $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc - $DIN_LOC_ROOT/share/meshes/fv1.9x2.5_141008_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/fv1.9x2.5_141008_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/fv1.9x2.5_141008_ESMFmesh.nc - $DIN_LOC_ROOT/ocn/docn7/SOM/default.som.forcing.aquaplanet.Qflux0_h30_sstQOBS.2degFV_c20170421.nc - $DIN_LOC_ROOT/ocn/docn7/SOM/default.som.forcing.aquaplanet.Qflux0_h30_sstQOBS.1degFV_c20170421.nc + $DIN_LOC_ROOT/ocn/docn7/SOM/default.som.forcing.aquaplanet.Qflux0_h30_sstQOBS.2degFV_c20170421.nc + $DIN_LOC_ROOT/ocn/docn7/SOM/default.som.forcing.aquaplanet.Qflux0_h30_sstQOBS.1degFV_c20170421.nc T So_t @@ -107,38 +131,54 @@ qdp So_qbot null + + bilinear + + null 1 1 1 0 - bilinear - linear - null - cycle - 1.5 + + linear + + + cycle + + + 1.5 + single - %DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc + %DIN_LOC_ROOT/share/meshes/fv0.9x1.25_141008_polemod_ESMFmesh.nc - sst_c4aquasom_0.9x1.25_clim.c170512.nc + sst_c4aquasom_0.9x1.25_clim.c170512.nc SST_cpl So_t null + + bilinear + + null 0 0 0 0 - bilinear - linear - null - cycle - 1.5 + + linear + + + cycle + + + 1.5 + single diff --git a/drof/cime_config/buildnml b/drof/cime_config/buildnml index 3fe7c0814..4fce2417b 100755 --- a/drof/cime_config/buildnml +++ b/drof/cime_config/buildnml @@ -1,6 +1,6 @@ #!/usr/bin/env python -"""Namelist creator for CIME's data river model. +"""Namelist creator for CDEPS data river model. """ # Typically ignore this. @@ -11,8 +11,13 @@ import os, sys -_CIMEROOT = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..","..","..","..","..") -sys.path.append(os.path.join(_CIMEROOT, "scripts", "Tools")) +_CDEPS_CONFIG = os.path.join(os.path.dirname(os.path.abspath(__file__)), os.pardir,os.pardir,"cime_config") +_CIMEROOT = os.environ.get("CIMEROOT") +if _CIMEROOT is None: + raise SystemExit("ERROR: must set CIMEROOT environment variable") +_LIBDIR = os.path.join(_CIMEROOT, "scripts", "Tools") +sys.path.append(_LIBDIR) +sys.path.append(os.path.join(_CDEPS_CONFIG)) from standard_script_setup import * from CIME.case import Case @@ -20,6 +25,7 @@ from CIME.XML.files import Files from CIME.nmlgen import NamelistGenerator from CIME.utils import expect, safe_copy from CIME.buildnml import create_namelist_infile, parse_input, copy_inputs_to_rundir +from stream_cdeps import StreamCDEPS logger = logging.getLogger(__name__) @@ -70,11 +76,11 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path # Generate drof.streams.xml streamlist = nmlgen.get_streams() - stream_definition_file = os.path.join(_CIMEROOT, "src", "components", - "cdeps", "drof", "cime_config", "stream_definition_drof.xml") - streams = StreamCDEPS(stream_definition_file, case) + stream_file = os.path.join(_CDEPS_CONFIG,os.pardir, "drof","cime_config","stream_definition_drof.xml") + schema_file = os.path.join(_CDEPS_CONFIG,"streams_v2.0.xsd") + streams = StreamCDEPS(stream_file, schema_file) outfile = os.path.join(confdir, "drof.streams"+inst_string+".xml" ) - streams.create_stream_xml(streamlist, case, outfile) + streams.create_stream_xml(streamlist, case, outfile, data_list_path) ############################################################################### def buildnml(case, caseroot, compname): diff --git a/drof/cime_config/stream_definition_drof.xml b/drof/cime_config/stream_definition_drof.xml index c9db85693..beb63bce1 100644 --- a/drof/cime_config/stream_definition_drof.xml +++ b/drof/cime_config/stream_definition_drof.xml @@ -2,11 +2,11 @@ - + - $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc + $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual.20190226.nc @@ -15,21 +15,29 @@ runoff Forr_rofl null + + bilinear + + null 1 1 1 0 - bilinear - upper - null - cycle - 3.0e0 + + upper + + + cycle + + + 3.0 + single - $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc + $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual.20190226.nc @@ -38,21 +46,29 @@ runoff Forr_rofl null + + bilinear + + null 1 1 1 0 - bilinear - upper - null - cycle - 3.0e0 + + upper + + + cycle + + + 3.0 + single - $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc + $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual.20190226.nc @@ -61,21 +77,29 @@ runoff Forr_rofl null + + bilinear + + null 1 1 1 0 - bilinear - upper - null - cycle - 3.0e0 + + upper + + + cycle + + + 3.0 + single - $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc + $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual.20190226.nc @@ -84,21 +108,29 @@ runoff Forr_rofl null + + bilinear + + null 1 1 1 0 - bilinear - upper - null - cycle - 3.0e0 + + upper + + + cycle + + + 3.0 + single - $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc + $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual.20190226.nc @@ -107,21 +139,29 @@ runoff Forr_rofl null + + bilinear + + null 1 1 1 0 - bilinear - upper - null - cycle - 3.0e0 + + upper + + + cycle + + + 3.0 + single - $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc + $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.iaf.20120419.nc @@ -130,21 +170,29 @@ runoff Forr_rofl null + + bilinear + + null 1 1948 2009 0 - bilinear - upper - null - cycle - 3.0e0 + + upper + + + cycle + + + 3.0 + single - $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc + $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.iaf-AISx00.20120419.nc @@ -153,21 +201,29 @@ runoff Forr_rofl null + + bilinear + + null 1 1948 2009 0 - bilinear - upper - null - cycle - 3.0e0 + + upper + + + cycle + + + 3.0 + single - $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc + $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.iaf-AISx45.20120419.nc @@ -176,21 +232,29 @@ runoff Forr_rofl null + + bilinear + + null 1 1948 2009 0 - bilinear - upper - null - cycle - 3.0e0 + + upper + + + cycle + + + 3.0 + single - $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc + $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.annual_ESMFmesh_120520.nc $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.iaf-AISx55.20120419.nc @@ -199,21 +263,29 @@ runoff Forr_rofl null + + bilinear + + null 1 1948 2009 0 - bilinear - upper - null - cycle - 3.0e0 + + upper + + + cycle + + + 3.0 + single - + $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.%y.170807.nc @@ -223,21 +295,29 @@ rofi Forr_rofi null + + bilinear + + null 1 1958 2016 0 - bilinear - upper - null - cycle - 3.0e0 + + upper + + + cycle + + + 3.0 + single - + $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.%y.170807.nc @@ -247,21 +327,29 @@ rofi Forr_rofi null + + bilinear + + null 1 1958 2018 0 - bilinear - upper - null - cycle - 3.0e0 + + upper + + + cycle + + + 3.0 + single - $ROF_DOMAIN_MESH + $ROF_DOMAIN_MESH $DIN_LOC_ROOT/lnd/dlnd7/RX1/runoff.daitren.iaf.20120419.nc @@ -271,15 +359,23 @@ rofImp_Forr_rofi Forr_rofi null + + bilinear + + null $DROF_CPLHIST_YR_ALIGN $DROF_CPLHIST_YR_START $DROF_CPLHIST_YR_END 0 - bilinear - nearest - null - cycle - 3.0e0 + + nearest + + + cycle + + + 3.0 + single diff --git a/dwav/cime_config/buildnml b/dwav/cime_config/buildnml index 92f5d98a8..e88dc0376 100755 --- a/dwav/cime_config/buildnml +++ b/dwav/cime_config/buildnml @@ -10,8 +10,13 @@ import os, sys -_CIMEROOT = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..","..","..","..","..") -sys.path.append(os.path.join(_CIMEROOT, "scripts", "Tools")) +_CDEPS_CONFIG = os.path.join(os.path.dirname(os.path.abspath(__file__)), os.pardir,os.pardir,"cime_config") +_CIMEROOT = os.environ.get("CIMEROOT") +if _CIMEROOT is None: + raise SystemExit("ERROR: must set CIMEROOT environment variable") +_LIBDIR = os.path.join(_CIMEROOT, "scripts", "Tools") +sys.path.append(_LIBDIR) +sys.path.append(os.path.join(_CDEPS_CONFIG)) from standard_script_setup import * from CIME.case import Case @@ -19,6 +24,7 @@ from CIME.XML.files import Files from CIME.nmlgen import NamelistGenerator from CIME.utils import expect, safe_copy from CIME.buildnml import create_namelist_infile, parse_input, copy_inputs_to_rundir +from stream_cdeps import StreamCDEPS logger = logging.getLogger(__name__) @@ -33,7 +39,6 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path different instances. The `confdir` argument is used to specify the directory in which output files will be placed. """ - #---------------------------------------------------- # Write out dwav_in and dwav.streams.xml #---------------------------------------------------- @@ -69,11 +74,11 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path # Generate dwav.streams.xml streamlist = nmlgen.get_streams() - stream_definition_file = os.path.join(_CIMEROOT, "src", "components", - "cdeps", "dwav", "cime_config", "stream_definition_dwav.xml") - streams = StreamCDEPS(stream_definition_file, case) + stream_file = os.path.join(_CDEPS_CONFIG,os.pardir, "dwav","cime_config","stream_definition_dwav.xml") + schema_file = os.path.join(_CDEPS_CONFIG,"streams_v2.0.xsd") + streams = StreamCDEPS(stream_file, schema_file) outfile = os.path.join(confdir, "dwav.streams"+inst_string+".xml" ) - streams.create_stream_xml(streamlist, case, outfile) + streams.create_stream_xml(streamlist, case, outfile, data_list_path) ############################################################################### def buildnml(case, caseroot, compname): diff --git a/dwav/cime_config/stream_definition_dwav.xml b/dwav/cime_config/stream_definition_dwav.xml index 4bcb76870..9bd1ecaab 100644 --- a/dwav/cime_config/stream_definition_dwav.xml +++ b/dwav/cime_config/stream_definition_dwav.xml @@ -2,11 +2,11 @@ - + - $DIN_LOC_ROOT/share/meshes/ww3a_120222_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/ww3a_120222_ESMFmesh.nc $DIN_LOC_ROOT/wav/dwav/waveclim.mon.ww3a.150612.nc @@ -17,15 +17,23 @@ vstokes Sw_vstokes null + + bilinear + + null 1 1 1 0 - bilinear - linear - null - cycle - 1.5e0 + + linear + + + cycle + + + 1.5 + single diff --git a/streams/dshr_stream_mod.F90 b/streams/dshr_stream_mod.F90 index 24a996c19..0a4da07cc 100644 --- a/streams/dshr_stream_mod.F90 +++ b/streams/dshr_stream_mod.F90 @@ -180,7 +180,7 @@ subroutine shr_stream_init_from_xml(xmlfilename, streamdat, mastertask, logunit, Sdoc => parseFile(xmlfilename, iostat=status) if (status /= 0) then - call shr_sys_abort("Could not open file "//trim(xmlfilename)) + call shr_sys_abort("Could not parse file "//trim(xmlfilename)) endif streamlist => getElementsByTagname(Sdoc, "stream_info") nstrms = getLength(streamlist) From 45b7a85823da1d187fe500d1be6e96bbcd1dff2e Mon Sep 17 00:00:00 2001 From: Mariana Vertenstein Date: Wed, 19 Aug 2020 16:15:12 -0600 Subject: [PATCH 107/153] fixed bugs --- dlnd/cime_config/buildnml | 2 +- docn/cime_config/buildnml | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/dlnd/cime_config/buildnml b/dlnd/cime_config/buildnml index 6975c1847..825928860 100755 --- a/dlnd/cime_config/buildnml +++ b/dlnd/cime_config/buildnml @@ -25,7 +25,7 @@ from CIME.nmlgen import NamelistGenerator from CIME.utils import expect, safe_copy from CIME.XML.files import Files from CIME.buildnml import create_namelist_infile, parse_input, copy_inputs_to_rundir -from CIME.XML.stream_cdeps import StreamCDEPS +from stream_cdeps import StreamCDEPS logger = logging.getLogger(__name__) diff --git a/docn/cime_config/buildnml b/docn/cime_config/buildnml index 8720f565d..5c6920aa3 100755 --- a/docn/cime_config/buildnml +++ b/docn/cime_config/buildnml @@ -25,7 +25,7 @@ from CIME.XML.files import Files from CIME.nmlgen import NamelistGenerator from CIME.utils import expect, safe_copy from CIME.buildnml import create_namelist_infile, parse_input, copy_inputs_to_rundir -from CIME.XML.stream_cdeps import StreamCDEPS +from stream_cdeps import StreamCDEPS logger = logging.getLogger(__name__) @@ -85,6 +85,7 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path #endif if generate_stream_file: streamlist = nmlgen.get_streams() + print "DEBUG: streamlist is ",streamlist stream_file = os.path.join(_CDEPS_CONFIG,os.pardir, "docn","cime_config","stream_definition_docn.xml") schema_file = os.path.join(_CDEPS_CONFIG,"streams_v2.0.xsd") streams = StreamCDEPS(stream_file, schema_file) From d808b7c6f78a2d5dcfeb1da0d1a452a9b66e08c8 Mon Sep 17 00:00:00 2001 From: Mariana Vertenstein Date: Thu, 20 Aug 2020 15:43:25 -0600 Subject: [PATCH 108/153] addressed PR issues raised by Jim Edwards --- datm/cime_config/buildnml | 3 +-- dice/cime_config/buildnml | 2 +- dlnd/cime_config/buildnml | 2 +- docn/cime_config/buildnml | 2 +- drof/cime_config/buildnml | 2 +- dwav/cime_config/buildnml | 2 +- streams/dshr_strdata_mod.F90 | 2 -- 7 files changed, 6 insertions(+), 9 deletions(-) diff --git a/datm/cime_config/buildnml b/datm/cime_config/buildnml index 175fae359..4f587d41b 100755 --- a/datm/cime_config/buildnml +++ b/datm/cime_config/buildnml @@ -17,7 +17,7 @@ if _CIMEROOT is None: raise SystemExit("ERROR: must set CIMEROOT environment variable") _LIBDIR = os.path.join(_CIMEROOT, "scripts", "Tools") sys.path.append(_LIBDIR) -sys.path.append(os.path.join(_CDEPS_CONFIG)) +sys.path.append(_CDEPS_CONFIG) from standard_script_setup import * from CIME.case import Case @@ -85,7 +85,6 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path # Determine streams streamlist = nmlgen.get_streams() - print "DEBUG: streamlist is ",streamlist if datm_presaero != "none": streamlist.append("presaero.{}".format(datm_presaero)) if datm_topo != "none": diff --git a/dice/cime_config/buildnml b/dice/cime_config/buildnml index 02cb72fd6..7b925d5b4 100755 --- a/dice/cime_config/buildnml +++ b/dice/cime_config/buildnml @@ -17,7 +17,7 @@ if _CIMEROOT is None: raise SystemExit("ERROR: must set CIMEROOT environment variable") _LIBDIR = os.path.join(_CIMEROOT, "scripts", "Tools") sys.path.append(_LIBDIR) -sys.path.append(os.path.join(_CDEPS_CONFIG)) +sys.path.append(_CDEPS_CONFIG) from standard_script_setup import * from CIME.case import Case diff --git a/dlnd/cime_config/buildnml b/dlnd/cime_config/buildnml index 825928860..998959374 100755 --- a/dlnd/cime_config/buildnml +++ b/dlnd/cime_config/buildnml @@ -17,7 +17,7 @@ if _CIMEROOT is None: raise SystemExit("ERROR: must set CIMEROOT environment variable") _LIBDIR = os.path.join(_CIMEROOT, "scripts", "Tools") sys.path.append(_LIBDIR) -sys.path.append(os.path.join(_CDEPS_CONFIG)) +sys.path.append(_CDEPS_CONFIG) from standard_script_setup import * from CIME.case import Case diff --git a/docn/cime_config/buildnml b/docn/cime_config/buildnml index 5c6920aa3..aeb97f895 100755 --- a/docn/cime_config/buildnml +++ b/docn/cime_config/buildnml @@ -17,7 +17,7 @@ if _CIMEROOT is None: raise SystemExit("ERROR: must set CIMEROOT environment variable") _LIBDIR = os.path.join(_CIMEROOT, "scripts", "Tools") sys.path.append(_LIBDIR) -sys.path.append(os.path.join(_CDEPS_CONFIG)) +sys.path.append(_CDEPS_CONFIG) from standard_script_setup import * from CIME.case import Case diff --git a/drof/cime_config/buildnml b/drof/cime_config/buildnml index 4fce2417b..316b46906 100755 --- a/drof/cime_config/buildnml +++ b/drof/cime_config/buildnml @@ -17,7 +17,7 @@ if _CIMEROOT is None: raise SystemExit("ERROR: must set CIMEROOT environment variable") _LIBDIR = os.path.join(_CIMEROOT, "scripts", "Tools") sys.path.append(_LIBDIR) -sys.path.append(os.path.join(_CDEPS_CONFIG)) +sys.path.append(_CDEPS_CONFIG) from standard_script_setup import * from CIME.case import Case diff --git a/dwav/cime_config/buildnml b/dwav/cime_config/buildnml index e88dc0376..88e4b19cd 100755 --- a/dwav/cime_config/buildnml +++ b/dwav/cime_config/buildnml @@ -16,7 +16,7 @@ if _CIMEROOT is None: raise SystemExit("ERROR: must set CIMEROOT environment variable") _LIBDIR = os.path.join(_CIMEROOT, "scripts", "Tools") sys.path.append(_LIBDIR) -sys.path.append(os.path.join(_CDEPS_CONFIG)) +sys.path.append(_CDEPS_CONFIG) from standard_script_setup import * from CIME.case import Case diff --git a/streams/dshr_strdata_mod.F90 b/streams/dshr_strdata_mod.F90 index 737d4bc68..9a6d9af80 100644 --- a/streams/dshr_strdata_mod.F90 +++ b/streams/dshr_strdata_mod.F90 @@ -1301,7 +1301,6 @@ subroutine shr_strdata_readstrm(sdat, per_stream, stream, fldbun_data, & real(r8) :: sinlat, sinlon real(r8) :: coslat, coslon real(r8) :: scale_factor, add_offset - integer(i2), allocatable :: data_short(:) integer(i2) :: fillvalue_i2 character(CS) :: uname, vname integer :: i, lev @@ -1724,7 +1723,6 @@ subroutine shr_strdata_set_stream_iodesc(sdat, per_stream, fldname, pioid, rc) character(CS) :: dimname integer, allocatable :: dimids(:) integer, allocatable :: dimlens(:) - integer :: unlimdid type(ESMF_DistGrid) :: distGrid integer :: lsize integer, pointer :: compdof(:) => null() From 2480ebb61e21f4732621043e4cf4b509c50d8060 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Wed, 26 Aug 2020 06:24:37 -0600 Subject: [PATCH 109/153] fix find compiler with cime --- CMakeLists.txt | 37 +++++++++++------ cime_config/buildlib | 94 +++++++++++++++++++++++--------------------- 2 files changed, 74 insertions(+), 57 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1dc057067..8d2d470f6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,31 @@ cmake_minimum_required(VERSION 3.10) +include(ExternalProject) + +if (DEFINED CIMEROOT) + message("Using CIME in ${CIMEROOT} with compiler ${COMPILER}") + include(${CASEROOT}/Macros.cmake) + if (${PIO_VERSION} LESS 2) + message( FATAL_ERROR "Version 2 of the PIO library required") + endif() + if (${MPILIB} STREQUAL "mpi-serial") + set(CMAKE_C_COMPILER ${SCC}) + set(CMAKE_Fortran_COMPILER ${SFC}) + set(CMAKE_CXX_COMPILER ${SCXX}) + else() + set(CMAKE_C_COMPILER ${MPICC}) + set(CMAKE_Fortran_COMPILER ${MPIFC}) + set(CMAKE_CXX_COMPILER ${MPICXX}) + endif() + set(CMAKE_Fortran_FLAGS "${FFLAGS} -I${LIBROOT}/include -I${LIBROOT}/finclude -I${LIBROOT}/nuopc/esmf/${NINST_VALUE}/include") +else() + set(BLD_STANDALONE TRUE) +endif() project(NUOPC_DATA_MODELS LANGUAGES Fortran VERSION 0.1) + list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) -include(ExternalProject) +message("CMAKE_MODULE_PATH is ${CMAKE_MODULE_PATH}") + find_package(ESMF REQUIRED) if (DEFINED PIO) set(PIO_PATH ${PIO}) @@ -11,16 +34,6 @@ else() endif() find_package(PIO REQUIRED COMPONENT C Fortran PATH ${PIO_PATH}) -if (DEFINED CIMEROOT) - message("Using CIME in ${CIMEROOT} with compiler ${COMPILER}") - include(${CASEROOT}/Macros.cmake) - if (${PIO_VERSION} LESS 2) - message( FATAL_ERROR "Version 2 of the PIO library required") - endif() - set(CMAKE_Fortran_FLAGS "${FFLAGS} -I${LIBROOT}/include -I${LIBROOT}/finclude -I${LIBROOT}/nuopc/esmf/${NINST_VALUE}/include") -else () - set(BLD_STANDALONE TRUE) -endif () if (NOT DEFINED MPILIB OR NOT ${MPILIB} STREQUAL "mpi-serial") find_package(MPI REQUIRED) endif() @@ -40,4 +53,4 @@ foreach(COMP datm dice dlnd docn drof dwav) endforeach(COMP) install(TARGETS streams dshr - LIBRARY DESTINATION lib) + LIBRARY DESTINATION lib) diff --git a/cime_config/buildlib b/cime_config/buildlib index 6e0fda1bb..7e54dc201 100755 --- a/cime_config/buildlib +++ b/cime_config/buildlib @@ -26,74 +26,78 @@ logger = logging.getLogger(__name__) def buildlib(bldroot, libroot, case, compname=None): if bldroot.endswith("obj") and not compname: - compname = os.path.basename(os.path.abspath(os.path.join(bldroot,os.pardir))) + compname = os.path.basename(os.path.abspath(os.path.join(bldroot,os.pardir))) if case.get_value("DEBUG"): - strdebug = "debug" + strdebug = "debug" else: - strdebug = "nodebug" + strdebug = "nodebug" if case.get_value("BUILD_THREADED"): - strthread = "threads" + strthread = "threads" else: - strthread = "nothreads" + strthread = "nothreads" mpilib = case.get_value("MPILIB") sharedpath = os.path.join(case.get_value("COMPILER"),mpilib, - strdebug, strthread, "nuopc") + strdebug, strthread, "nuopc") if compname: - s, o, e = run_cmd("make d{}".format(compname), from_dir=bldroot, verbose=True) - libname = "lib{}.a".format(compname) - dlibname = "libd{}.a".format(compname) - dlibpath = os.path.join(bldroot, dlibname) - if os.path.exists(dlibpath): - symlink_force(os.path.join(bldroot,dlibname), os.path.join(libroot,libname)) - else: - expect(False, "ERROR in {} build {} {}".format(compname,o,e)) + s, o, e = run_cmd("make d{}".format(compname), from_dir=bldroot, verbose=True) + libname = "lib{}.a".format(compname) + dlibname = "libd{}.a".format(compname) + dlibpath = os.path.join(bldroot, dlibname) + if os.path.exists(dlibpath): + symlink_force(os.path.join(bldroot,dlibname), os.path.join(libroot,libname)) + else: + expect(False, "ERROR in {} build {} {}".format(compname,o,e)) else: - logger.info("Running cmake for CDEPS") - srcpath = os.path.join(case.get_value("SRCROOT"),"components","cdeps") + logger.info("Running cmake for CDEPS") + srcpath = os.path.join(case.get_value("SRCROOT"),"components","cdeps") - cmake_flags = get_standard_cmake_args(case, os.path.join(sharedpath,"cdeps"), shared_lib=True) - ccomp, cxxcomp, fcomp = get_compiler_names(case) + cmake_flags = get_standard_cmake_args(case, os.path.join(sharedpath,"cdeps"), shared_lib=True) +# ccomp, cxxcomp, fcomp = get_compiler_names(case) - cmake_flags += " -DCMAKE_C_COMPILER={} -DCMAKE_CXX_COMPILER={} -DCMAKE_Fortran_COMPILER={}".format(ccomp, cxxcomp, fcomp) - cmake_flags += " -DCMAKE_INSTALL_PREFIX={} ".format(libroot) - cmake_flags += " -DLIBROOT={} ".format(libroot) + srcpath - cmake_flags += " -DMPILIB={} ".format(mpilib) - cmake_flags += " -DPIO_C_LIBRARY={path}/lib -DPIO_C_INCLUDE_DIR={path}/include ".format(path=os.path.join(case.get_value("EXEROOT"),sharedpath)) - cmake_flags += " -DPIO_Fortran_LIBRARY={path}/lib -DPIO_Fortran_INCLUDE_DIR={path}/include ".format(path=os.path.join(case.get_value("EXEROOT"),sharedpath)) +# cmake_flags += " -DCMAKE_C_COMPILER={} -DCMAKE_CXX_COMPILER={} -DCMAKE_Fortran_COMPILER={}".format(ccomp, cxxcomp, fcomp) + cmake_flags += " -DCMAKE_INSTALL_PREFIX={} ".format(libroot) + cmake_flags += " -DLIBROOT={} ".format(libroot) + srcpath + cmake_flags += " -DMPILIB={} ".format(mpilib) + cmake_flags += " -DPIO_C_LIBRARY={path}/lib -DPIO_C_INCLUDE_DIR={path}/include ".format(path=os.path.join(case.get_value("EXEROOT"),sharedpath)) + cmake_flags += " -DPIO_Fortran_LIBRARY={path}/lib -DPIO_Fortran_INCLUDE_DIR={path}/include ".format(path=os.path.join(case.get_value("EXEROOT"),sharedpath)) - logger.info("cmake_flags {}".format(cmake_flags)) - s,o,e = run_cmd("cmake {} ".format(cmake_flags), from_dir=bldroot, verbose=True) - expect(not s,"ERROR from cmake output={}, error={}".format(o,e)) + logger.info("cmake_flags {}".format(cmake_flags)) + s,o,e = run_cmd("cmake {} ".format(cmake_flags), from_dir=bldroot, verbose=True) + expect(not s,"ERROR from cmake output={}, error={}".format(o,e)) - s,o,e = run_cmd("make install", from_dir=bldroot, verbose=True) - expect(not s,"ERROR from make output={}, error={}".format(o,e)) + s,o,e = run_cmd("make install", from_dir=bldroot, verbose=True) + expect(not s,"ERROR from make output={}, error={}".format(o,e)) - # Link the CDEPS component directories to the location expected by cime - for comp in ("atm", "lnd", "ice", "ocn", "rof", "wav"): - compname = case.get_value("COMP_{}".format(comp.upper())) - comppath = os.path.join(case.get_value("EXEROOT"),comp,"obj") - if compname == "d"+comp: - if not os.path.islink(comppath): - os.rmdir(comppath) - symlink_force(os.path.join(bldroot,compname), comppath) + # Link the CDEPS component directories to the location expected by cime + for comp in ("atm", "lnd", "ice", "ocn", "rof", "wav"): + compname = case.get_value("COMP_{}".format(comp.upper())) + comppath = os.path.join(case.get_value("EXEROOT"),comp,"obj") + if compname == "d"+comp: + if not os.path.islink(comppath): + os.rmdir(comppath) + symlink_force(os.path.join(bldroot,compname), comppath) def get_compiler_names(case): - machobj = Machines(machine=case.get_value("MACH")) + machine=case.get_value("MACH") + machobj = Machines(machine=machine) compobj = Compilers(machobj) + compiler = case.get_value("COMPILER") if case.get_value("MPILIB") == 'mpi-serial': - ccomp = compobj.get_value("SCC").strip() - cxxcomp = compobj.get_value("SCXX").strip() - fcomp = compobj.get_value("SFC").strip() + print("HERE Compiler {} mach={}".format(compiler, machine)) + ccomp = compobj.get_value("SCC",{"COMPILER":compiler,"MACH":machine}).strip() + cxxcomp = compobj.get_value("SCXX",{"COMPILER":compiler}).strip() + fcomp = compobj.get_value("SFC",{"COMPILER":compiler}).strip() + print("HERE the compilers are {} {} {}".format(ccomp,cxxcomp, fcomp)) else: - ccomp = compobj.get_value("MPICC").strip() - cxxcomp = compobj.get_value("MPICXX").strip() - fcomp = compobj.get_value("MPIFC").strip() + ccomp = compobj.get_value("MPICC",{"COMPILER":compiler}).strip() + cxxcomp = compobj.get_value("MPICXX",{"COMPILER":compiler}).strip() + fcomp = compobj.get_value("MPIFC",{"COMPILER":compiler}).strip() return ccomp, cxxcomp, fcomp @@ -101,7 +105,7 @@ def get_compiler_names(case): def _main_func(args): caseroot, libroot, bldroot = parse_input(args) with Case(caseroot) as case: - buildlib(bldroot, libroot, case) + buildlib(bldroot, libroot, case) if __name__ == "__main__": _main_func(sys.argv) From 82a29743acf8af6d54b44bfff5af5830740b160a Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 18 Sep 2020 08:01:34 -0600 Subject: [PATCH 110/153] improve the build, remove hardcoded path --- CMakeLists.txt | 1 + cime_config/buildlib | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1dc057067..970328820 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,6 +2,7 @@ cmake_minimum_required(VERSION 3.10) project(NUOPC_DATA_MODELS LANGUAGES Fortran VERSION 0.1) list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) +message("CMAKE_C_COMPILER is ${CMAKE_C_COMPILER}") include(ExternalProject) find_package(ESMF REQUIRED) if (DEFINED PIO) diff --git a/cime_config/buildlib b/cime_config/buildlib index 6e0fda1bb..246705252 100755 --- a/cime_config/buildlib +++ b/cime_config/buildlib @@ -53,18 +53,18 @@ def buildlib(bldroot, libroot, case, compname=None): expect(False, "ERROR in {} build {} {}".format(compname,o,e)) else: logger.info("Running cmake for CDEPS") - srcpath = os.path.join(case.get_value("SRCROOT"),"components","cdeps") + srcpath = os.path.abspath(os.path.join(os.path.dirname(__file__),os.pardir)) cmake_flags = get_standard_cmake_args(case, os.path.join(sharedpath,"cdeps"), shared_lib=True) ccomp, cxxcomp, fcomp = get_compiler_names(case) cmake_flags += " -DCMAKE_C_COMPILER={} -DCMAKE_CXX_COMPILER={} -DCMAKE_Fortran_COMPILER={}".format(ccomp, cxxcomp, fcomp) cmake_flags += " -DCMAKE_INSTALL_PREFIX={} ".format(libroot) - cmake_flags += " -DLIBROOT={} ".format(libroot) + srcpath + cmake_flags += " -DLIBROOT={} ".format(libroot) cmake_flags += " -DMPILIB={} ".format(mpilib) cmake_flags += " -DPIO_C_LIBRARY={path}/lib -DPIO_C_INCLUDE_DIR={path}/include ".format(path=os.path.join(case.get_value("EXEROOT"),sharedpath)) cmake_flags += " -DPIO_Fortran_LIBRARY={path}/lib -DPIO_Fortran_INCLUDE_DIR={path}/include ".format(path=os.path.join(case.get_value("EXEROOT"),sharedpath)) - + cmake_flags += srcpath logger.info("cmake_flags {}".format(cmake_flags)) s,o,e = run_cmd("cmake {} ".format(cmake_flags), from_dir=bldroot, verbose=True) expect(not s,"ERROR from cmake output={}, error={}".format(o,e)) From d4394fa888657f62095bbbf78cdf4dfc3d21abc2 Mon Sep 17 00:00:00 2001 From: Mariana Vertenstein Date: Fri, 2 Oct 2020 15:45:35 -0600 Subject: [PATCH 111/153] fixed bug in drof JRA55 specfication for mesh file --- drof/cime_config/stream_definition_drof.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drof/cime_config/stream_definition_drof.xml b/drof/cime_config/stream_definition_drof.xml index beb63bce1..2a3efef97 100644 --- a/drof/cime_config/stream_definition_drof.xml +++ b/drof/cime_config/stream_definition_drof.xml @@ -285,7 +285,7 @@ - + $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.4.runoff.1958_ESMFmesh_cdf5_20201020.nc $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.%y.170807.nc @@ -317,7 +317,7 @@ - + $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.4.runoff.1958_ESMFmesh_cdf5_20201020.nc $DIN_LOC_ROOT/lnd/dlnd7/JRA55/JRA.v1.1.runoff.%y.170807.nc From e9a966004c475508da763033d496bd8d77700470 Mon Sep 17 00:00:00 2001 From: Ufuk Turuncoglu Date: Mon, 12 Oct 2020 11:16:18 -0500 Subject: [PATCH 112/153] fix GPTL issue --- streams/dshr_methods_mod.F90 | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/streams/dshr_methods_mod.F90 b/streams/dshr_methods_mod.F90 index b16d0ad4f..395731b2d 100644 --- a/streams/dshr_methods_mod.F90 +++ b/streams/dshr_methods_mod.F90 @@ -595,12 +595,16 @@ subroutine memcheck(string, level, mastertask) ! local variables integer :: ierr +#ifdef CESMCOUPLED integer, external :: GPTLprint_memusage +#endif !----------------------------------------------------------------------- +#ifdef CESMCOUPLED if ((mastertask .and. memdebug_level > level) .or. memdebug_level > level+1) then ierr = GPTLprint_memusage(string) endif +#endif end subroutine memcheck From 977bfda5e44be7292c48b421b6e6260b1ca3b9f2 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Fri, 30 Oct 2020 10:01:00 -0600 Subject: [PATCH 113/153] fix stdout format issue --- dice/ice_comp_nuopc.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dice/ice_comp_nuopc.F90 b/dice/ice_comp_nuopc.F90 index b3380fba8..05ede8161 100644 --- a/dice/ice_comp_nuopc.F90 +++ b/dice/ice_comp_nuopc.F90 @@ -204,7 +204,7 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) write(logunit,F01)' ny_global = ',ny_global write(logunit,F03)' flux_swpf = ',flux_swpf write(logunit,F03)' flux_Qmin = ',flux_Qmin - write(logunit,F03)' flux_Qacc = ',flux_Qacc + write(logunit,F02)' flux_Qacc = ',flux_Qacc write(logunit,F03)' flux_Qacc0 = ',flux_Qacc0 write(logunit,F00)' restfilm = ',trim(restfilm) From 2c2a2be2108778b82c063c5973f8e2f274bda34e Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Mon, 16 Nov 2020 10:24:40 -0700 Subject: [PATCH 114/153] add code to avoid clashes when building multiple cases at once --- cime_config/buildlib | 40 +++++++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/cime_config/buildlib b/cime_config/buildlib index c87259267..7d7ce192f 100755 --- a/cime_config/buildlib +++ b/cime_config/buildlib @@ -4,7 +4,7 @@ build cime component model library. This buildlib script is used by all CDEPS components. """ -import sys, os +import sys, os, time _CIMEROOT = os.environ.get("CIMEROOT") if _CIMEROOT is None: @@ -62,14 +62,32 @@ def buildlib(bldroot, libroot, case, compname=None): cmake_flags += " -DPIO_C_LIBRARY={path}/lib -DPIO_C_INCLUDE_DIR={path}/include ".format(path=os.path.join(case.get_value("EXEROOT"),sharedpath)) cmake_flags += " -DPIO_Fortran_LIBRARY={path}/lib -DPIO_Fortran_INCLUDE_DIR={path}/include ".format(path=os.path.join(case.get_value("EXEROOT"),sharedpath)) cmake_flags += srcpath - logger.info("cmake_flags {}".format(cmake_flags)) - s,o,e = run_cmd("cmake {} ".format(cmake_flags), from_dir=bldroot, verbose=True) - expect(not s,"ERROR from cmake output={}, error={}".format(o,e)) + + latest_src_file = max(all_files_under(srcpath), key=os.path.getmtime) + src_time = os.path.getmtime(latest_src_file) + bld_time = src_time + 1 + bldfiles = all_files_under(bldroot) + if peek(bldfiles): + latest_bld_file = max(bldfiles, key=os.path.getmtime) + bld_time = os.path.getmtime(latest_bld_file) + + if src_time < bld_time: + logger.info("cmake_flags {}".format(cmake_flags)) + s,o,e = run_cmd("cmake {} ".format(cmake_flags), from_dir=bldroot, verbose=True) + expect(not s,"ERROR from cmake output={}, error={}".format(o,e)) + else: + # The dwav_lib is the last file built in cdeps, wait for it to be built + dwav_lib = os.path.join(bldroot,"dwav","libdwav.a") + time_to_wait = 10 + time_counter = 0 + while not os.path.exists(dwav_lib): + time.sleep(1) + time_counter += 1 + if time_counter > time_to_wait:break s,o,e = run_cmd("make install", from_dir=bldroot, verbose=True) expect(not s,"ERROR from make output={}, error={}".format(o,e)) - # Link the CDEPS component directories to the location expected by cime for comp in ("atm", "lnd", "ice", "ocn", "rof", "wav"): compname = case.get_value("COMP_{}".format(comp.upper())) @@ -79,6 +97,18 @@ def buildlib(bldroot, libroot, case, compname=None): os.rmdir(comppath) symlink_force(os.path.join(bldroot,compname), comppath) +def peek(iterable): + try: + first = next(iterable) + except StopIteration: + return None + return first + +def all_files_under(path): + """Iterates through all files that are under the given path.""" + for cur_path, dirnames, filenames in os.walk(path): + for filename in filenames: + yield os.path.join(cur_path, filename) def get_compiler_names(case): machine=case.get_value("MACH") From dc6e3f679a99a31474a237a04f1e4e9c5de87dfb Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Mon, 16 Nov 2020 11:45:18 -0700 Subject: [PATCH 115/153] increase wait time --- cime_config/buildlib | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cime_config/buildlib b/cime_config/buildlib index 7d7ce192f..75935c828 100755 --- a/cime_config/buildlib +++ b/cime_config/buildlib @@ -78,7 +78,7 @@ def buildlib(bldroot, libroot, case, compname=None): else: # The dwav_lib is the last file built in cdeps, wait for it to be built dwav_lib = os.path.join(bldroot,"dwav","libdwav.a") - time_to_wait = 10 + time_to_wait = 60 time_counter = 0 while not os.path.exists(dwav_lib): time.sleep(1) @@ -97,6 +97,8 @@ def buildlib(bldroot, libroot, case, compname=None): os.rmdir(comppath) symlink_force(os.path.join(bldroot,compname), comppath) + + def peek(iterable): try: first = next(iterable) From 8f0a405c6041cd42f558366dd6693e380970b78f Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Mon, 16 Nov 2020 14:06:11 -0700 Subject: [PATCH 116/153] simplify locking --- cime_config/buildlib | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/cime_config/buildlib b/cime_config/buildlib index 75935c828..3ff043b7f 100755 --- a/cime_config/buildlib +++ b/cime_config/buildlib @@ -65,25 +65,27 @@ def buildlib(bldroot, libroot, case, compname=None): latest_src_file = max(all_files_under(srcpath), key=os.path.getmtime) src_time = os.path.getmtime(latest_src_file) - bld_time = src_time + 1 - bldfiles = all_files_under(bldroot) - if peek(bldfiles): - latest_bld_file = max(bldfiles, key=os.path.getmtime) - bld_time = os.path.getmtime(latest_bld_file) + if os.path.exists(os.path.join(bldroot,"CMakeFiles")): + bld_time = os.path.getmtime(os.path.join(bldroot,"CMakeFiles")) + else: + bld_time = src_time - 1 - if src_time < bld_time: + # if any file in src is newer than CmakeFiles in the build directory, rerun cmake + if src_time > bld_time: logger.info("cmake_flags {}".format(cmake_flags)) s,o,e = run_cmd("cmake {} ".format(cmake_flags), from_dir=bldroot, verbose=True) expect(not s,"ERROR from cmake output={}, error={}".format(o,e)) else: # The dwav_lib is the last file built in cdeps, wait for it to be built dwav_lib = os.path.join(bldroot,"dwav","libdwav.a") - time_to_wait = 60 + time_to_wait = 300 time_counter = 0 while not os.path.exists(dwav_lib): time.sleep(1) time_counter += 1 - if time_counter > time_to_wait:break + if time_counter > time_to_wait: + break + expect(time_counter <= time_to_wait," Timeout waiting for {}".format(dwav_lib)) s,o,e = run_cmd("make install", from_dir=bldroot, verbose=True) expect(not s,"ERROR from make output={}, error={}".format(o,e)) @@ -97,15 +99,6 @@ def buildlib(bldroot, libroot, case, compname=None): os.rmdir(comppath) symlink_force(os.path.join(bldroot,compname), comppath) - - -def peek(iterable): - try: - first = next(iterable) - except StopIteration: - return None - return first - def all_files_under(path): """Iterates through all files that are under the given path.""" for cur_path, dirnames, filenames in os.walk(path): From 6de69637f5a3dcd9c26a7ebaaac8183533b1788f Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Tue, 17 Nov 2020 12:38:02 -0700 Subject: [PATCH 117/153] fix issue with CMAKE_INSTALL_PATH --- cime_config/buildlib | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/cime_config/buildlib b/cime_config/buildlib index 3ff043b7f..176ef0a10 100755 --- a/cime_config/buildlib +++ b/cime_config/buildlib @@ -41,6 +41,7 @@ def buildlib(bldroot, libroot, case, compname=None): sharedpath = os.path.join(case.get_value("COMPILER"),mpilib, strdebug, strthread, "nuopc") + exe_root = case.get_value("EXEROOT") if compname: s, o, e = run_cmd("make d{}".format(compname), from_dir=bldroot, verbose=True) @@ -55,8 +56,9 @@ def buildlib(bldroot, libroot, case, compname=None): logger.info("Running cmake for CDEPS") srcpath = os.path.abspath(os.path.join(os.path.dirname(__file__),os.pardir)) cmake_flags = get_standard_cmake_args(case, os.path.join(sharedpath,"cdeps"), shared_lib=True) - - cmake_flags += " -DCMAKE_INSTALL_PREFIX={} ".format(libroot) + # base path of install to be completed by setting DESTDIR in make install +# cmake_flags += " -DCMAKE_INSTALL_PREFIX:PATH={} ".format(libroot[len(exe_root)+1:]) + cmake_flags += " -DCMAKE_INSTALL_PREFIX:PATH=/" cmake_flags += " -DLIBROOT={} ".format(libroot) cmake_flags += " -DMPILIB={} ".format(mpilib) cmake_flags += " -DPIO_C_LIBRARY={path}/lib -DPIO_C_INCLUDE_DIR={path}/include ".format(path=os.path.join(case.get_value("EXEROOT"),sharedpath)) @@ -86,8 +88,9 @@ def buildlib(bldroot, libroot, case, compname=None): if time_counter > time_to_wait: break expect(time_counter <= time_to_wait," Timeout waiting for {}".format(dwav_lib)) + print("HERE exeroot {} bldroot {}".format(exe_root, bldroot)) - s,o,e = run_cmd("make install", from_dir=bldroot, verbose=True) + s,o,e = run_cmd("make install DESTDIR={}".format(libroot), from_dir=bldroot, verbose=True) expect(not s,"ERROR from make output={}, error={}".format(o,e)) # Link the CDEPS component directories to the location expected by cime From 3726ebb0bbbfb96b268c7986ca33f95786b0c25b Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Tue, 17 Nov 2020 12:38:57 -0700 Subject: [PATCH 118/153] cleanup; --- cime_config/buildlib | 1 - 1 file changed, 1 deletion(-) diff --git a/cime_config/buildlib b/cime_config/buildlib index 176ef0a10..c3ca2780a 100755 --- a/cime_config/buildlib +++ b/cime_config/buildlib @@ -57,7 +57,6 @@ def buildlib(bldroot, libroot, case, compname=None): srcpath = os.path.abspath(os.path.join(os.path.dirname(__file__),os.pardir)) cmake_flags = get_standard_cmake_args(case, os.path.join(sharedpath,"cdeps"), shared_lib=True) # base path of install to be completed by setting DESTDIR in make install -# cmake_flags += " -DCMAKE_INSTALL_PREFIX:PATH={} ".format(libroot[len(exe_root)+1:]) cmake_flags += " -DCMAKE_INSTALL_PREFIX:PATH=/" cmake_flags += " -DLIBROOT={} ".format(libroot) cmake_flags += " -DMPILIB={} ".format(mpilib) From 3985a73d29c227f3e9366839d3104672785d8abe Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Tue, 24 Nov 2020 15:02:52 -0700 Subject: [PATCH 119/153] fix for pgi build --- datm/cime_config/buildnml | 5 ++++- dshr/CMakeLists.txt | 5 +++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/datm/cime_config/buildnml b/datm/cime_config/buildnml index 4f587d41b..ebfde5be8 100755 --- a/datm/cime_config/buildnml +++ b/datm/cime_config/buildnml @@ -85,6 +85,9 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path # Determine streams streamlist = nmlgen.get_streams() + if type(streamlist) == type(str()): + streamlist = [] + if datm_presaero != "none": streamlist.append("presaero.{}".format(datm_presaero)) if datm_topo != "none": @@ -97,7 +100,7 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path anomaly_forcing = nmlgen.get_value("anomaly_forcing") if anomaly_forcing[0] is not None: streamlist += anomaly_forcing - + # Generate datm.streams.xml stream_file = os.path.join(_CDEPS_CONFIG,os.pardir, "datm","cime_config","stream_definition_datm.xml") schema_file = os.path.join(_CDEPS_CONFIG,"streams_v2.0.xsd") diff --git a/dshr/CMakeLists.txt b/dshr/CMakeLists.txt index 1a98d00ab..bf4f02553 100644 --- a/dshr/CMakeLists.txt +++ b/dshr/CMakeLists.txt @@ -2,7 +2,9 @@ project(dshr Fortran) set(SRCFILES dshr_dfield_mod.F90 dshr_fldlist_mod.F90 dshr_mod.F90) +set(MODFILES ${SRCFILES}) foreach(FILE ${SRCFILES}) + list(TRANSFORM MODFILES REPLACE ".F90" ".mod") if(EXISTS "${CASEROOT}/SourceMods/src.cdeps/${FILE}") list(REMOVE_ITEM SRCFILES ${FILE}) list(APPEND SRCFILES "${CASEROOT}/SourceMods/src.cdeps/${FILE}") @@ -22,3 +24,6 @@ target_include_directories (dshr PUBLIC "${CMAKE_BINARY_DIR}/share") target_include_directories (dshr PUBLIC "${PIO_Fortran_INCLUDE_DIR}") install(TARGETS dshr LIBRARY DESTINATION lib) +foreach(MOD ${MODFILES}) + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${MOD}" DESTINATION include) +endforeach() From f9da2a62f240670b75db7f5b312d646d8f9db1d9 Mon Sep 17 00:00:00 2001 From: Mariana Vertenstein Date: Fri, 4 Dec 2020 09:25:12 -0700 Subject: [PATCH 120/153] feature/perf_updates --- streams/dshr_methods_mod.F90 | 113 +++++++++++++++++------------------ 1 file changed, 54 insertions(+), 59 deletions(-) diff --git a/streams/dshr_methods_mod.F90 b/streams/dshr_methods_mod.F90 index b16d0ad4f..aa68721af 100644 --- a/streams/dshr_methods_mod.F90 +++ b/streams/dshr_methods_mod.F90 @@ -156,11 +156,12 @@ subroutine dshr_fldbun_GetFldPtr(FB, fldname, fldptr1, fldptr2, rank, field, rc) real(R8), pointer , intent(inout), optional :: fldptr2(:,:) integer , intent(out), optional :: rank type(ESMF_Field) , intent(out), optional :: field - integer , intent(out) :: rc + integer , intent(out) :: rc ! local variables - type(ESMF_Field) :: lfield - integer :: lrank + integer :: lrank + type(ESMF_Field) :: lfield + integer :: ungriddedUBound(1) character(len=*), parameter :: subname='(dshr_fldbun_GetFldPtr)' ! ---------------------------------------------- @@ -171,16 +172,35 @@ subroutine dshr_fldbun_GetFldPtr(FB, fldname, fldptr1, fldptr2, rank, field, rc) rc = ESMF_FAILURE return endif - call ESMF_FieldBundleGet(FB, fieldName=trim(fldname), field=lfield, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return - call dshr_field_getfldptr(lfield, fldptr1=fldptr1, fldptr2=fldptr2, rank=lrank, rc=rc) + call ESMF_FieldGet(lfield, ungriddedUBound=ungriddedUBound, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return - + if (ungriddedUBound(1) > 0) then + if (.not.present(fldptr2)) then + call ESMF_LogWrite(trim(subname)//": ERROR missing rank=2 array ", & + ESMF_LOGMSG_ERROR, line=__LINE__, file=u_FILE_u) + rc = ESMF_FAILURE + return + endif + call ESMF_FieldGet(lfield, farrayptr=fldptr2, rc=rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + lrank = 2 + else + if (.not.present(fldptr1)) then + call ESMF_LogWrite(trim(subname)//": ERROR missing rank=1 array ", & + ESMF_LOGMSG_ERROR, line=__LINE__, file=u_FILE_u) + rc = ESMF_FAILURE + return + endif + call ESMF_FieldGet(lfield, farrayptr=fldptr1, rc=rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + lrank = 1 + end if if (present(rank)) rank = lrank if (present(field)) field = lfield - end subroutine dshr_fldbun_getfldptr + end subroutine dshr_fldbun_GetFldPtr !=============================================================================== subroutine dshr_fldbun_regrid(FBsrc, FBdst, RH, zeroregion, rc) @@ -509,79 +529,54 @@ subroutine dshr_field_getfldptr(field, fldptr1, fldptr2, rank, abort, rc) ! local variables type(ESMF_FieldStatus_Flag) :: status - type(ESMF_Mesh) :: lmesh - integer :: lrank, nnodes, nelements + integer :: ungriddedUBound(1) + integer :: lrank logical :: labort character(len=*), parameter :: subname='(field_getfldptr)' ! ---------------------------------------------- - rc = ESMF_SUCCESS labort = .true. if (present(abort)) then labort = abort endif - lrank = -99 call ESMF_FieldGet(field, status=status, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return - if (status /= ESMF_FIELDSTATUS_COMPLETE) then - - lrank = 0 if (labort) then - call ESMF_LogWrite(trim(subname)//": ERROR data not allocated ", ESMF_LOGMSG_INFO, rc=rc) + call ESMF_LogWrite(trim(subname)//": ERROR data not allocated ", ESMF_LOGMSG_ERROR, rc=rc) rc = ESMF_FAILURE return else call ESMF_LogWrite(trim(subname)//": WARNING data not allocated ", ESMF_LOGMSG_INFO, rc=rc) endif - else - - call ESMF_FieldGet(field, rank=lrank, rc=rc) - if (chkerr(rc,__LINE__,u_FILE_u)) return - call ESMF_FieldGet(field, mesh=lmesh, rc=rc) - if (chkerr(rc,__LINE__,u_FILE_u)) return - call ESMF_MeshGet(lmesh, numOwnedNodes=nnodes, numOwnedElements=nelements, rc=rc) - if (chkerr(rc,__LINE__,u_FILE_u)) return - if (nnodes == 0 .and. nelements == 0) then - lrank = 0 - end if - - if (lrank == 0) then - call ESMF_LogWrite(trim(subname)//": no local nodes or elements ", & - ESMF_LOGMSG_INFO) - elseif (lrank == 1) then - if (.not.present(fldptr1)) then - call ESMF_LogWrite(trim(subname)//": ERROR missing rank=1 array ", & - ESMF_LOGMSG_ERROR, line=__LINE__, file=u_FILE_u) - rc = ESMF_FAILURE - return - endif - call ESMF_FieldGet(field, farrayPtr=fldptr1, rc=rc) - if (chkerr(rc,__LINE__,u_FILE_u)) return - elseif (lrank == 2) then - if (.not.present(fldptr2)) then - call ESMF_LogWrite(trim(subname)//": ERROR missing rank=2 array ", & - ESMF_LOGMSG_ERROR, line=__LINE__, file=u_FILE_u) - rc = ESMF_FAILURE - return - endif - call ESMF_FieldGet(field, farrayPtr=fldptr2, rc=rc) - if (chkerr(rc,__LINE__,u_FILE_u)) return - else - call ESMF_LogWrite(trim(subname)//": ERROR in rank ", & - ESMF_LOGMSG_ERROR, line=__LINE__, file=u_FILE_u) - rc = ESMF_FAILURE - return - endif - + call ESMF_FieldGet(field, ungriddedUBound=ungriddedUBound, rc=rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + if (ungriddedUBound(1) > 0) then + if (.not.present(fldptr2)) then + call ESMF_LogWrite(trim(subname)//": ERROR missing rank=2 array ", & + ESMF_LOGMSG_ERROR, line=__LINE__, file=u_FILE_u) + rc = ESMF_FAILURE + return + endif + call ESMF_FieldGet(field, farrayptr=fldptr2, rc=rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + lrank = 2 + else + if (.not.present(fldptr1)) then + call ESMF_LogWrite(trim(subname)//": ERROR missing rank=1 array ", & + ESMF_LOGMSG_ERROR, line=__LINE__, file=u_FILE_u) + rc = ESMF_FAILURE + return + endif + call ESMF_FieldGet(field, farrayptr=fldptr1, rc=rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + lrank = 1 + end if endif ! status - - if (present(rank)) then - rank = lrank - endif + if (present(rank)) rank = lrank end subroutine dshr_field_getfldptr From 3e6b717e4615651ee23dbd765a01e4a006fc38c1 Mon Sep 17 00:00:00 2001 From: Ufuk Turuncoglu Date: Fri, 11 Dec 2020 01:11:35 -0600 Subject: [PATCH 121/153] fix for finding PIO --- CMakeLists.txt | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 734fec8de..85ff894d8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,12 +28,17 @@ list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) message("CMAKE_MODULE_PATH is ${CMAKE_MODULE_PATH}") find_package(ESMF REQUIRED) -if (DEFINED PIO) - set(PIO_PATH ${PIO}) + +if (DEFINED ENV{PIO_ROOT}) + message("PIO_ROOT is $ENV{PIO_ROOT}") else() - set(PIO_PATH $ENV{PIO}) + if (DEFINED PIO) + set(PIO_PATH ${PIO}) + else() + set(PIO_PATH $ENV{PIO}) + endif() + find_package(PIO REQUIRED COMPONENT C Fortran PATH ${PIO_PATH}) endif() -find_package(PIO REQUIRED COMPONENT C Fortran PATH ${PIO_PATH}) if (NOT DEFINED MPILIB OR NOT ${MPILIB} STREQUAL "mpi-serial") find_package(MPI REQUIRED) From d94eecadb8b89f072d36745586ad4150eac93f3a Mon Sep 17 00:00:00 2001 From: Ufuk Turuncoglu Date: Fri, 11 Dec 2020 12:48:52 -0600 Subject: [PATCH 122/153] fix docn if the stream only provides SST --- docn/docn_datamode_copyall_mod.F90 | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/docn/docn_datamode_copyall_mod.F90 b/docn/docn_datamode_copyall_mod.F90 index 08fb4600f..064df3b73 100644 --- a/docn/docn_datamode_copyall_mod.F90 +++ b/docn/docn_datamode_copyall_mod.F90 @@ -89,16 +89,22 @@ subroutine docn_datamode_copyall_init_pointers(exportState, ocn_fraction, rc) if (chkerr(rc,__LINE__,u_FILE_u)) return call dshr_state_getfldptr(exportState, 'So_t' , fldptr1=So_t , rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return - call dshr_state_getfldptr(exportState, 'So_s' , fldptr1=So_s , rc=rc) + call dshr_state_getfldptr(exportState, 'So_s' , fldptr1=So_s , allowNullReturn=.true., rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return - call dshr_state_getfldptr(exportState, 'So_u' , fldptr1=So_u , rc=rc) + call dshr_state_getfldptr(exportState, 'So_u' , fldptr1=So_u , allowNullReturn=.true., rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return - call dshr_state_getfldptr(exportState, 'So_v' , fldptr1=So_v , rc=rc) + call dshr_state_getfldptr(exportState, 'So_v' , fldptr1=So_v , allowNullReturn=.true., rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return - So_u(:) = 0.0_r8 - So_v(:) = 0.0_r8 - So_s(:) = ocnsalt + if (associated(So_u)) then + So_u(:) = 0.0_r8 + end if + if (associated(So_v)) then + So_v(:) = 0.0_r8 + end if + if (associated(So_s)) then + So_s(:) = ocnsalt + end if So_t(:) = TkFrz ! Set export state ocean fraction (So_omask) From 6f88a90b912e00122f333d4a6d9259cef19a685f Mon Sep 17 00:00:00 2001 From: Mariana Vertenstein Date: Mon, 4 Jan 2021 12:45:25 -0700 Subject: [PATCH 123/153] fixes to get datm working with dynamic fraction calculation in clm --- datm/cime_config/stream_definition_datm.xml | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/datm/cime_config/stream_definition_datm.xml b/datm/cime_config/stream_definition_datm.xml index 732ab38d3..2606ca3ac 100644 --- a/datm/cime_config/stream_definition_datm.xml +++ b/datm/cime_config/stream_definition_datm.xml @@ -627,7 +627,7 @@ - + @@ -642,8 +642,7 @@ null - bilinear - nn + redist null $DATM_CLMNCEP_YR_ALIGN @@ -655,11 +654,9 @@ cycle - extend 1.5 - 1.e30 single @@ -676,8 +673,7 @@ null - bilinear - nn + redist null $DATM_CLMNCEP_YR_ALIGN @@ -689,11 +685,9 @@ cycle - extend 1.5 - 1.e30 single @@ -714,8 +708,7 @@ null - bilinear - nn + redist null $DATM_CLMNCEP_YR_ALIGN @@ -727,11 +720,9 @@ cycle - extend 1.5 - 1.e30 single From b38ae62fff3a3c0314c0b4590907e22da2e253bc Mon Sep 17 00:00:00 2001 From: Mariana Vertenstein Date: Mon, 4 Jan 2021 12:45:59 -0700 Subject: [PATCH 124/153] changes to get docn working with dynamic fraction calculation if maskfile is different from mesh file --- docn/cime_config/buildnml | 4 +- docn/cime_config/namelist_definition_docn.xml | 12 +- dshr/dshr_mod.F90 | 187 ++++++++++++------ 3 files changed, 141 insertions(+), 62 deletions(-) diff --git a/docn/cime_config/buildnml b/docn/cime_config/buildnml index aeb97f895..7947bf3d5 100755 --- a/docn/cime_config/buildnml +++ b/docn/cime_config/buildnml @@ -52,6 +52,7 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path atm_nx = case.get_value("ATM_NX") atm_ny = case.get_value("ATM_NY") model_grid = case.get_value("GRID") + mask_grid = case.get_value('MASK_GRID') # Check for incompatible options. expect(ocn_grid != "null", @@ -64,12 +65,11 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path # Initialize namelist defaults config = {} config['model_grid'] = model_grid + config['mask_grid'] = mask_grid config['ocn_grid'] = ocn_grid config['docn_mode'] = docn_mode config['create_mesh'] = 'true' if case.get_value("OCN_DOMAIN_MESH") == 'create_mesh' else 'false' - aquaplanet_mode = True if 'AQ' in case.get_value('COMPSET') else False scol_mode = True if case.get_value('PTS_MODE') else False - config['set_model_maskfile'] = 'true' if scol_mode or (ocn_nx==atm_nx and ocn_ny==atm_ny and not aquaplanet_mode) else 'false' nmlgen.init_defaults(infile, config) diff --git a/docn/cime_config/namelist_definition_docn.xml b/docn/cime_config/namelist_definition_docn.xml index 77ce5ad2d..cf2a2c193 100644 --- a/docn/cime_config/namelist_definition_docn.xml +++ b/docn/cime_config/namelist_definition_docn.xml @@ -124,19 +124,21 @@ - + char streams abs docn_nml - file specifying model mask if not obtained from input model mesh + MESH for ocn mask + $OCN_DOMAIN_MESH - $OCN_DOMAIN_PATH/$OCN_DOMAIN_FILE - $OCN_DOMAIN_PATH/$OCN_DOMAIN_FILE - $OCN_DOMAIN_PATH/$OCN_DOMAIN_FILE + $DIN_LOC_ROOT/share/meshes/gx1v6_090205_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/gx1v7_151008_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/tx0.66v1_190314_ESMFmesh.nc + $DIN_LOC_ROOT/share/meshes/tx0.25v1_190204_ESMFmesh.nc diff --git a/dshr/dshr_mod.F90 b/dshr/dshr_mod.F90 index 4dcd96482..ed320828e 100644 --- a/dshr/dshr_mod.F90 +++ b/dshr/dshr_mod.F90 @@ -273,7 +273,8 @@ subroutine dshr_mesh_init(gcomp, nullstr, logunit, compname, model_nxg, model_ny ! (1) if asked to create the mesh ! - create mesh from input file given by model_createmesh_fromfile ! - if single column find the nearest neighbor in model_createmesh_fromfile - ! (2) if not single column - obtain the mesh directly from the mesh input + ! (2) if not single column - obtain the mesh directly from the mesh input + ! - reset the model mesh if the model maskfile is not equal to the model mesh file if (trim(model_meshfile) == nullstr) then @@ -319,7 +320,7 @@ subroutine dshr_mesh_init(gcomp, nullstr, logunit, compname, model_nxg, model_ny scol_lat = shr_const_spval end if - ! Now create the model meshfile using the model_maskfile as the input file + ! Now create the model meshfile call dshr_mesh_create(trim(model_createmesh_fromfile), scol_mode, scol_lon, scol_lat, & trim(compname), my_task, logunit, model_mesh, model_mask, model_frac, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return @@ -330,61 +331,20 @@ subroutine dshr_mesh_init(gcomp, nullstr, logunit, compname, model_nxg, model_ny model_mesh = ESMF_MeshCreate(trim(model_meshfile), fileformat=ESMF_FILEFORMAT_ESMFMESH, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - ! TODO: need a check that the mask file has the same grid as the model mesh ! Reset the model mesh mask if the mask file is different from the mesh file if (trim(model_meshfile) /= trim(model_maskfile)) then - pio_subsystem => shr_pio_getiosys(trim(compname)) - io_type = shr_pio_getiotype(trim(compname)) - io_format = shr_pio_getioformat(trim(compname)) - - ! obtain lsize and model_gindex - call ESMF_MeshGet(model_mesh, elementdistGrid=distGrid, rc=rc) - if (ChkErr(rc,__LINE__,u_FILE_u)) return - call ESMF_DistGridGet(distGrid, localDe=0, elementCount=lsize, rc=rc) - if (ChkErr(rc,__LINE__,u_FILE_u)) return - - ! allocate memory for model_mask and model_frac - allocate(model_frac(lsize)) - allocate(model_mask(lsize)) - - ! get model_gindex (allocate memory first) - allocate(model_gindex(lsize)) - call ESMF_DistGridGet(distGrid, localDe=0, seqIndexList=model_gindex, rc=rc) + ! obtain the model mask by mapping the mesh created by reading in the model_maskfile to the + ! model mesh and then reset the model mesh mask + call dshr_set_modelmask(model_mesh, model_maskfile, compname, model_mask, model_frac, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - ! obtain model mask and model frac from separate model_maskfile - rcode = pio_openfile(pio_subsystem, pioid, io_type, trim(model_maskfile), pio_nowrite) - call pio_seterrorhandling(pioid, PIO_BCAST_ERROR) - rcode = pio_inq_varid(pioid, 'mask', varid) - if ( rcode /= PIO_NOERR ) then - call shr_sys_abort(' ERROR: variable mask not found in file '//trim(model_maskfile)) - end if - call pio_seterrorhandling(pioid, PIO_INTERNAL_ERROR) - call pio_initdecomp(pio_subsystem, pio_int, (/model_nxg, model_nyg/), model_gindex, pio_iodesc) - call pio_read_darray(pioid, varid, pio_iodesc, model_mask, rcode) - call pio_freedecomp(pio_subsystem, pio_iodesc) - - ! obtain model model frac from separate model_maskfile - call pio_seterrorhandling(pioid, PIO_BCAST_ERROR) - rcode = pio_inq_varid(pioid, 'frac', varid) - if ( rcode /= PIO_NOERR ) then - call shr_sys_abort(' ERROR: variable frac not found in file '//trim(model_maskfile)) + if (masterproc) then + write(logunit,F00) trim(subname)// " obtained "//trim(compname)//" mesh from "// & + trim(model_meshfile) + write(logunit,F00) trim(subname)// " obtained "//trim(compname)//" mask from "// & + trim(model_maskfile) end if - call pio_seterrorhandling(pioid, PIO_INTERNAL_ERROR) - call pio_initdecomp(pio_subsystem, pio_double, (/model_nxg, model_nyg/), model_gindex, pio_iodesc) - call pio_read_darray(pioid, varid, pio_iodesc, model_frac, rcode) - call pio_freedecomp(pio_subsystem, pio_iodesc) - - ! close file - call pio_closefile(pioid) - - ! deallocate pointers - deallocate(model_gindex) - - ! reset the model mesh mask - call ESMF_MeshSet(model_mesh, elementMask=model_mask, rc=rc) - if (ChkErr(rc,__LINE__,u_FILE_u)) return else ! model_meshfile and model_maskfile are the same @@ -407,13 +367,13 @@ subroutine dshr_mesh_init(gcomp, nullstr, logunit, compname, model_nxg, model_ny call ESMF_ArrayDestroy(elemMaskArray, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return + if (masterproc) then + write(logunit,F00) trim(subname)// " obtained "//trim(compname)//" mesh and mask from "// & + trim(model_meshfile) + end if end if - end if - if (masterproc) then - write(logunit,F00) trim(subname)// " obtaining "//trim(compname)//" mesh from "// trim(model_meshfile) - end if end subroutine dshr_mesh_init @@ -1608,4 +1568,121 @@ real(R8) function getNextRadCDay_i8( ymd, tod, stepno, dtime, iradsw, calendar ) end function getNextRadCDay_i8 + !=============================================================================== + subroutine dshr_set_modelmask(mesh_dst, meshfile_mask, compname, mask_dst, frac_dst, rc) + + use ESMF, only : ESMF_FieldRegridStore, ESMF_FieldRegrid, ESMF_FIELDCREATE + use ESMF, only : ESMF_REGRIDMETHOD_CONSERVE, ESMF_NORMTYPE_DSTAREA, ESMF_UNMAPPEDACTION_IGNORE + use ESMF, only : ESMF_TYPEKIND_R8, ESMF_MESHLOC_ELEMENT + use ESMF, only : ESMF_RouteHandleDestroy, ESMF_FieldDestroy + + ! input/out variables + type(ESMF_Mesh) , intent(in) :: mesh_dst + character(len=*) , intent(in) :: meshfile_mask + character(len=*) , intent(in) :: compname + integer , pointer , intent(out) :: mask_dst(:) + real(r8), pointer , intent(out) :: frac_dst(:) + integer , intent(out) :: rc + + ! local variables: + type(ESMF_Mesh) :: mesh_mask + type(ESMF_Field) :: field_mask + type(ESMF_Field) :: field_dst + type(ESMF_RouteHandle) :: rhandle + integer :: srcMaskValue = 0 + integer :: dstMaskValue = -987987 ! spval for RH mask values + integer :: srcTermProcessing_Value = 0 + logical :: checkflag = .false. + real(r8) , pointer :: mask_src(:) ! on mesh created from meshfile_mask + real(r8) , pointer :: dataptr1d(:) + type(ESMF_DistGrid) :: distgrid_mask + type(ESMF_Array) :: elemMaskArray + integer :: lsize_mask, lsize_dst + integer :: n, spatialDim + real(r8) :: fminval = 0.001_r8 + real(r8) :: fmaxval = 1._r8 + !------------------------------------------------------------------------------- + + rc = ESMF_SUCCESS + + mesh_mask = ESMF_MeshCreate(trim(meshfile_mask), fileformat=ESMF_FILEFORMAT_ESMFMESH, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + + call ESMF_MeshGet(mesh_dst, spatialDim=spatialDim, numOwnedElements=lsize_dst, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + allocate(mask_dst(lsize_dst)) + allocate(frac_dst(lsize_dst)) + + ! create fields on source and destination meshes + field_mask = ESMF_FieldCreate(mesh_mask, ESMF_TYPEKIND_R8, meshloc=ESMF_MESHLOC_ELEMENT, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + field_dst = ESMF_FieldCreate(mesh_dst, ESMF_TYPEKIND_R8, meshloc=ESMF_MESHLOC_ELEMENT, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + + ! create route handle to map source mask (assume ocean) to destination mesh (assume atm/lnd) + call ESMF_FieldRegridStore(field_mask, field_dst, routehandle=rhandle, & + srcMaskValues=(/srcMaskValue/), dstMaskValues=(/dstMaskValue/), & + regridmethod=ESMF_REGRIDMETHOD_CONSERVE, normType=ESMF_NORMTYPE_DSTAREA, & + srcTermProcessing=srcTermProcessing_Value, & + ignoreDegenerate=.true., unmappedaction=ESMF_UNMAPPEDACTION_IGNORE, rc=rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + + ! fill in values for field_mask with mask on source mesh + call ESMF_MeshGet(mesh_mask, elementdistGrid=distgrid_mask, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call ESMF_DistGridGet(distgrid_mask, localDe=0, elementCount=lsize_mask, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + allocate(mask_src(lsize_mask)) + elemMaskArray = ESMF_ArrayCreate(distgrid_mask, mask_src, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + ! The following call fills in the values of mask_src + call ESMF_MeshGet(mesh_mask, elemMaskArray=elemMaskArray, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + ! The following call fills in the values of field_mask + call ESMF_FieldGet(field_mask, farrayptr=dataptr1d, rc=rc) + dataptr1d(:) = mask_src(:) + + ! map source mask to destination mesh - to obtain destination mask and frac + call ESMF_FieldRegrid(field_mask, field_dst, routehandle=rhandle, & + termorderflag=ESMF_TERMORDER_SRCSEQ, checkflag=checkflag, zeroregion=ESMF_REGION_TOTAL, rc=rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + + ! now determine mask_dst and frac_dst + call ESMF_MeshGet(mesh_dst, spatialDim=spatialDim, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call ESMF_FieldGet(field_dst, farrayptr=dataptr1d, rc=rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + frac_dst(:) = dataptr1d(:) + do n = 1,lsize_dst + if (compname == 'LND') then + frac_dst(n) = 1._r8 - frac_dst(n) + end if + if (frac_dst(n) > fmaxval) then + frac_dst(n) = 1._r8 + end if + if (frac_dst(n) < fminval) then + frac_dst(n) = 0._r8 + end if + if (frac_dst(n) /= 0._r8) then + mask_dst(n) = 1 + else + mask_dst(n) = 0 + end if + enddo + + ! reset the model mesh mask + call ESMF_MeshSet(mesh_dst, elementMask=mask_dst, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + + ! deallocate memory + call ESMF_RouteHandleDestroy(rhandle, rc=rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + call ESMF_FieldDestroy(field_mask, rc=rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + call ESMF_FieldDestroy(field_dst, rc=rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + deallocate(mask_src) + + end subroutine dshr_set_modelmask + end module dshr_mod From 5808cb1adb74e3ed08c2dfb67c4fa16cdd2b8b8b Mon Sep 17 00:00:00 2001 From: Ufuk Turuncoglu Date: Thu, 7 Jan 2021 17:25:53 -0600 Subject: [PATCH 125/153] fix cmake build to work with HAFS --- CMakeLists.txt | 37 ++++++++++++++++++++++++++++++++++--- datm/CMakeLists.txt | 33 ++++++++++++++++++++++----------- docn/CMakeLists.txt | 16 +++++++++------- dshr/CMakeLists.txt | 11 +++++++---- share/CMakeLists.txt | 2 +- streams/CMakeLists.txt | 15 +++++++++++---- 6 files changed, 84 insertions(+), 30 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 85ff894d8..d4384b426 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,7 +27,11 @@ list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) message("CMAKE_MODULE_PATH is ${CMAKE_MODULE_PATH}") -find_package(ESMF REQUIRED) +if (TARGET esmf) + message("Target esmf is already found. Skip find_package ...") +else() + find_package(ESMF REQUIRED) +endif() if (DEFINED ENV{PIO_ROOT}) message("PIO_ROOT is $ENV{PIO_ROOT}") @@ -58,5 +62,32 @@ foreach(COMP datm dice dlnd docn drof dwav) add_subdirectory("${COMP}") endforeach(COMP) -install(TARGETS streams dshr - LIBRARY DESTINATION lib) +target_include_directories(streams PUBLIC $ + $) +target_include_directories(streams PUBLIC $ + $) +target_include_directories(dshr PUBLIC $ + $) +target_include_directories(dshr PUBLIC $ + $) +target_include_directories(dshr PUBLIC $ + $) +foreach(COMP datm dice dlnd docn drof dwav) +target_include_directories(${COMP} PUBLIC $ + $) +target_include_directories(${COMP} PUBLIC $ + $) +target_include_directories(${COMP} PUBLIC $ + $) +endforeach(COMP) + +foreach(COMP datm docn streams dshr cdeps_share FoX_dom FoX_wxml FoX_sax FoX_common FoX_utils FoX_fsys) + install(TARGETS ${COMP} + EXPORT ${COMP} + LIBRARY DESTINATION lib + COMPONENT Library) + install(EXPORT ${COMP} + DESTINATION lib/cmake) +endforeach(COMP) + +install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mod DESTINATION ${CMAKE_INSTALL_PREFIX}/CDEPS) diff --git a/datm/CMakeLists.txt b/datm/CMakeLists.txt index a39d02e23..0773022e5 100644 --- a/datm/CMakeLists.txt +++ b/datm/CMakeLists.txt @@ -1,15 +1,26 @@ project(datm Fortran) +set(SRCFILES atm_comp_nuopc.F90 + datm_datamode_clmncep_mod.F90 + datm_datamode_core2_mod.F90 + datm_datamode_jra_mod.F90 + datm_datamode_era5_mod.F90) -add_library(datm atm_comp_nuopc.F90 - datm_datamode_clmncep_mod.F90 - datm_datamode_core2_mod.F90 - datm_datamode_jra_mod.F90 - datm_datamode_era5_mod.F90) +foreach(FILE ${SRCFILES}) + if(EXISTS "${CASEROOT}/SourceMods/src.datm/${FILE}") + list(REMOVE_ITEM SRCFILES ${FILE}) + list(APPEND SRCFILES "${CASEROOT}/SourceMods/src.datm/${FILE}") + message("Using ${FILE} from ${CASEROOT}/SourceMods/src.datm") + endif() +endforeach() + +message("DATM srcfiles are ${SRCFILES}") + +add_library(datm ${SRCFILES}) add_dependencies(datm dshr streams) -target_include_directories (datm PUBLIC ${ESMF_F90COMPILEPATHS}) -target_include_directories (datm PUBLIC "${CMAKE_BINARY_DIR}/dshr") -target_include_directories (datm PUBLIC "${CMAKE_SOURCE_DIR}") -target_include_directories (datm PUBLIC "${CMAKE_BINARY_DIR}/share") -target_include_directories (datm PUBLIC "${CMAKE_BINARY_DIR}/streams") -target_include_directories (datm PUBLIC "${PIO_Fortran_INCLUDE_DIR}") +target_include_directories (datm PRIVATE ${ESMF_F90COMPILEPATHS}) +target_include_directories (datm PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/dshr) +target_include_directories (datm PRIVATE ${CMAKE_SOURCE_DIR}) +target_include_directories (datm PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/share) +target_include_directories (datm PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/streams) +target_include_directories (datm PRIVATE ${PIO_Fortran_INCLUDE_DIR}) diff --git a/docn/CMakeLists.txt b/docn/CMakeLists.txt index 33e3ba01c..71c011478 100644 --- a/docn/CMakeLists.txt +++ b/docn/CMakeLists.txt @@ -13,12 +13,14 @@ foreach(FILE ${SRCFILES}) endif() endforeach() -add_library(docn ${SRCFILES}) +message("DOCN srcfiles are ${SRCFILES}") +add_library(docn ${SRCFILES}) -target_include_directories (docn PUBLIC ${ESMF_F90COMPILEPATHS}) -target_include_directories (docn PUBLIC "${CMAKE_BINARY_DIR}/dshr") -target_include_directories (docn PUBLIC "${CMAKE_SOURCE_DIR}") -target_include_directories (docn PUBLIC "${CMAKE_BINARY_DIR}/share") -target_include_directories (docn PUBLIC "${CMAKE_BINARY_DIR}/streams") -target_include_directories (docn PUBLIC "${PIO_Fortran_INCLUDE_DIR}") +add_dependencies(docn dshr streams) +target_include_directories (docn PRIVATE ${ESMF_F90COMPILEPATHS}) +target_include_directories (docn PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/dshr) +target_include_directories (docn PRIVATE ${CMAKE_SOURCE_DIR}) +target_include_directories (docn PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/share) +target_include_directories (docn PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/streams) +target_include_directories (docn PRIVATE ${PIO_Fortran_INCLUDE_DIR}) diff --git a/dshr/CMakeLists.txt b/dshr/CMakeLists.txt index 1a98d00ab..b0afe1f7b 100644 --- a/dshr/CMakeLists.txt +++ b/dshr/CMakeLists.txt @@ -1,7 +1,9 @@ project(dshr Fortran) + set(SRCFILES dshr_dfield_mod.F90 dshr_fldlist_mod.F90 dshr_mod.F90) + foreach(FILE ${SRCFILES}) if(EXISTS "${CASEROOT}/SourceMods/src.cdeps/${FILE}") list(REMOVE_ITEM SRCFILES ${FILE}) @@ -16,9 +18,10 @@ if(BLD_STANDALONE) endif() add_dependencies(dshr streams) -target_include_directories (dshr PUBLIC ${ESMF_F90COMPILEPATHS}) -target_include_directories (dshr PUBLIC "${CMAKE_BINARY_DIR}/streams") -target_include_directories (dshr PUBLIC "${CMAKE_BINARY_DIR}/share") -target_include_directories (dshr PUBLIC "${PIO_Fortran_INCLUDE_DIR}") +target_include_directories (dshr PRIVATE ${ESMF_F90COMPILEPATHS}) +target_include_directories (dshr PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/streams) +target_include_directories (dshr PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/share) +target_include_directories (dshr PRIVATE "${PIO_Fortran_INCLUDE_DIR}") + install(TARGETS dshr LIBRARY DESTINATION lib) diff --git a/share/CMakeLists.txt b/share/CMakeLists.txt index 06bb2c7d3..542a8f67f 100644 --- a/share/CMakeLists.txt +++ b/share/CMakeLists.txt @@ -20,7 +20,7 @@ add_library(cdeps_share ${GenF90_SRCS} shr_precip_mod.F90 shr_string_mod.F90) -target_include_directories (cdeps_share PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${ESMF_F90COMPILEPATHS} ${PIO_Fortran_INCLUDE_DIRS}) +target_include_directories (cdeps_share PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${ESMF_F90COMPILEPATHS} ${PIO_Fortran_INCLUDE_DIRS}) #===== genf90 ===== diff --git a/streams/CMakeLists.txt b/streams/CMakeLists.txt index 013ee7a40..ee9a924e3 100644 --- a/streams/CMakeLists.txt +++ b/streams/CMakeLists.txt @@ -2,7 +2,9 @@ set(SRCFILES dshr_methods_mod.F90 dshr_strdata_mod.F90 dshr_stream_mod.F90 dshr_tinterp_mod.F90) + set(MODFILES ${SRCFILES}) + foreach(FILE ${SRCFILES}) list(TRANSFORM MODFILES REPLACE ".F90" ".mod") if(EXISTS "${CASEROOT}/SourceMods/src.cdeps/${FILE}") @@ -11,16 +13,21 @@ foreach(FILE ${SRCFILES}) message("Using ${FILE} from ${CASEROOT}/SourceMods/src.cdeps") endif() endforeach() + message("Stream srcfiles are ${SRCFILES}") + add_library(streams ${SRCFILES}) + add_dependencies(streams FoX_dom) if(BLD_STANDALONE) add_dependencies(streams cdeps_share) endif() -target_include_directories (streams PUBLIC ${CMAKE_BINARY_DIR}/fox/include) -target_include_directories (streams PUBLIC ${ESMF_F90COMPILEPATHS}) -target_include_directories (streams PUBLIC ${PIO_Fortran_INCLUDE_DIR}) -target_include_directories (streams PUBLIC ${CMAKE_BINARY_DIR}/share) + +target_include_directories (streams PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/fox/include) +target_include_directories (streams PRIVATE ${ESMF_F90COMPILEPATHS}) +target_include_directories (streams PRIVATE ${PIO_Fortran_INCLUDE_DIR}) +target_include_directories (streams PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/share) + install(TARGETS streams LIBRARY DESTINATION lib) foreach(MOD ${MODFILES}) From 2cec07f074906130be27111b5dc9c83c588ab0fa Mon Sep 17 00:00:00 2001 From: Ufuk Turuncoglu Date: Fri, 8 Jan 2021 15:01:39 -0600 Subject: [PATCH 126/153] update cmake files for dice, dlnd, drof and dwav --- dice/CMakeLists.txt | 9 ++++++--- dlnd/CMakeLists.txt | 8 +++++--- drof/CMakeLists.txt | 8 +++++--- dwav/CMakeLists.txt | 10 ++++++---- 4 files changed, 22 insertions(+), 13 deletions(-) diff --git a/dice/CMakeLists.txt b/dice/CMakeLists.txt index f45a446b3..6892363f3 100644 --- a/dice/CMakeLists.txt +++ b/dice/CMakeLists.txt @@ -10,11 +10,14 @@ foreach(FILE ${SRCFILES}) message("Using ${FILE} from ${CASEROOT}/SourceMods/src.dice") endif() endforeach() + +message("DICE srcfiles are ${SRCFILES}") + add_library(dice ${SRCFILES}) target_include_directories (dice PUBLIC ${ESMF_F90COMPILEPATHS}) -target_include_directories (dice PUBLIC "${CMAKE_BINARY_DIR}/dshr") +target_include_directories (dice PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/dshr") target_include_directories (dice PUBLIC "${CMAKE_SOURCE_DIR}") -target_include_directories (dice PUBLIC "${CMAKE_BINARY_DIR}/share") -target_include_directories (dice PUBLIC "${CMAKE_BINARY_DIR}/streams") +target_include_directories (dice PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/share") +target_include_directories (dice PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/streams") target_include_directories (dice PUBLIC "${PIO_Fortran_INCLUDE_DIR}") diff --git a/dlnd/CMakeLists.txt b/dlnd/CMakeLists.txt index ae080d307..1449d4d80 100644 --- a/dlnd/CMakeLists.txt +++ b/dlnd/CMakeLists.txt @@ -9,11 +9,13 @@ foreach(FILE ${SRCFILES}) endif() endforeach() +message("DLND srcfiles are ${SRCFILES}") + add_library(dlnd ${SRCFILES}) target_include_directories (dlnd PUBLIC ${ESMF_F90COMPILEPATHS}) -target_include_directories (dlnd PUBLIC "${CMAKE_BINARY_DIR}/dshr") +target_include_directories (dlnd PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/dshr") target_include_directories (dlnd PUBLIC "${CMAKE_SOURCE_DIR}") -target_include_directories (dlnd PUBLIC "${CMAKE_BINARY_DIR}/share") -target_include_directories (dlnd PUBLIC "${CMAKE_BINARY_DIR}/streams") +target_include_directories (dlnd PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/share") +target_include_directories (dlnd PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/streams") target_include_directories (dlnd PUBLIC "${PIO_Fortran_INCLUDE_DIR}") diff --git a/drof/CMakeLists.txt b/drof/CMakeLists.txt index 62a92cb83..d3d08f130 100644 --- a/drof/CMakeLists.txt +++ b/drof/CMakeLists.txt @@ -9,11 +9,13 @@ foreach(FILE ${SRCFILES}) endif() endforeach() +message("DROF srcfiles are ${SRCFILES}") + add_library(drof ${SRCFILES}) target_include_directories (drof PUBLIC ${ESMF_F90COMPILEPATHS}) -target_include_directories (drof PUBLIC "${CMAKE_BINARY_DIR}/dshr") +target_include_directories (drof PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/dshr") target_include_directories (drof PUBLIC "${CMAKE_SOURCE_DIR}") -target_include_directories (drof PUBLIC "${CMAKE_BINARY_DIR}/share") -target_include_directories (drof PUBLIC "${CMAKE_BINARY_DIR}/streams") +target_include_directories (drof PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/share") +target_include_directories (drof PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/streams") target_include_directories (drof PUBLIC "${PIO_Fortran_INCLUDE_DIR}") diff --git a/dwav/CMakeLists.txt b/dwav/CMakeLists.txt index c848741c6..72d608704 100644 --- a/dwav/CMakeLists.txt +++ b/dwav/CMakeLists.txt @@ -1,5 +1,6 @@ project(dwav Fortran) set(SRCFILES wav_comp_nuopc.F90) + foreach(FILE ${SRCFILES}) if(EXISTS "${CASEROOT}/SourceMods/src.dwav/${FILE}") list(REMOVE_ITEM SRCFILES ${FILE}) @@ -8,12 +9,13 @@ foreach(FILE ${SRCFILES}) endif() endforeach() -add_library(dwav ${SRCFILES}) +message("DWAV srcfiles are ${SRCFILES}") +add_library(dwav ${SRCFILES}) target_include_directories (dwav PUBLIC ${ESMF_F90COMPILEPATHS}) -target_include_directories (dwav PUBLIC "${CMAKE_BINARY_DIR}/dshr") +target_include_directories (dwav PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/dshr") target_include_directories (dwav PUBLIC "${CMAKE_SOURCE_DIR}") -target_include_directories (dwav PUBLIC "${CMAKE_BINARY_DIR}/share") -target_include_directories (dwav PUBLIC "${CMAKE_BINARY_DIR}/streams") +target_include_directories (dwav PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/share") +target_include_directories (dwav PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/streams") target_include_directories (dwav PUBLIC "${PIO_Fortran_INCLUDE_DIR}") From 47d9ec11741e3fbf4d8952536fea295d5136a3de Mon Sep 17 00:00:00 2001 From: Ufuk Turuncoglu Date: Fri, 8 Jan 2021 16:07:20 -0600 Subject: [PATCH 127/153] update dependencies --- dice/CMakeLists.txt | 1 + dlnd/CMakeLists.txt | 1 + drof/CMakeLists.txt | 1 + dwav/CMakeLists.txt | 1 + 4 files changed, 4 insertions(+) diff --git a/dice/CMakeLists.txt b/dice/CMakeLists.txt index 6892363f3..eb446e735 100644 --- a/dice/CMakeLists.txt +++ b/dice/CMakeLists.txt @@ -15,6 +15,7 @@ message("DICE srcfiles are ${SRCFILES}") add_library(dice ${SRCFILES}) +add_dependencies(dice dshr streams) target_include_directories (dice PUBLIC ${ESMF_F90COMPILEPATHS}) target_include_directories (dice PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/dshr") target_include_directories (dice PUBLIC "${CMAKE_SOURCE_DIR}") diff --git a/dlnd/CMakeLists.txt b/dlnd/CMakeLists.txt index 1449d4d80..715b54814 100644 --- a/dlnd/CMakeLists.txt +++ b/dlnd/CMakeLists.txt @@ -13,6 +13,7 @@ message("DLND srcfiles are ${SRCFILES}") add_library(dlnd ${SRCFILES}) +add_dependencies(dlnd dshr streams) target_include_directories (dlnd PUBLIC ${ESMF_F90COMPILEPATHS}) target_include_directories (dlnd PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/dshr") target_include_directories (dlnd PUBLIC "${CMAKE_SOURCE_DIR}") diff --git a/drof/CMakeLists.txt b/drof/CMakeLists.txt index d3d08f130..ce772168c 100644 --- a/drof/CMakeLists.txt +++ b/drof/CMakeLists.txt @@ -13,6 +13,7 @@ message("DROF srcfiles are ${SRCFILES}") add_library(drof ${SRCFILES}) +add_dependencies(drof dshr streams) target_include_directories (drof PUBLIC ${ESMF_F90COMPILEPATHS}) target_include_directories (drof PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/dshr") target_include_directories (drof PUBLIC "${CMAKE_SOURCE_DIR}") diff --git a/dwav/CMakeLists.txt b/dwav/CMakeLists.txt index 72d608704..27ebbd898 100644 --- a/dwav/CMakeLists.txt +++ b/dwav/CMakeLists.txt @@ -13,6 +13,7 @@ message("DWAV srcfiles are ${SRCFILES}") add_library(dwav ${SRCFILES}) +add_dependencies(dwav dshr streams) target_include_directories (dwav PUBLIC ${ESMF_F90COMPILEPATHS}) target_include_directories (dwav PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/dshr") target_include_directories (dwav PUBLIC "${CMAKE_SOURCE_DIR}") From 0831048a7aaff94939031be20ec429484e11a3bb Mon Sep 17 00:00:00 2001 From: Mariana Vertenstein Date: Sun, 10 Jan 2021 12:14:33 -0700 Subject: [PATCH 128/153] fixed problem for single point cases - no mapping file will be created if mapalgo is none --- datm/datm_datamode_cplhist_mod.F90 | 233 +++++++++++++++++++++++++++++ streams/dshr_strdata_mod.F90 | 75 +++++----- 2 files changed, 272 insertions(+), 36 deletions(-) create mode 100644 datm/datm_datamode_cplhist_mod.F90 diff --git a/datm/datm_datamode_cplhist_mod.F90 b/datm/datm_datamode_cplhist_mod.F90 new file mode 100644 index 000000000..ac9b24488 --- /dev/null +++ b/datm/datm_datamode_cplhist_mod.F90 @@ -0,0 +1,233 @@ +module datm_datamode_cplhist_mod + + use ESMF + use NUOPC , only : NUOPC_Advertise + use shr_kind_mod , only : r8=>shr_kind_r8, i8=>shr_kind_i8, cl=>shr_kind_cl, cs=>shr_kind_cs + use shr_sys_mod , only : shr_sys_abort + use dshr_methods_mod , only : dshr_state_getfldptr, chkerr + use dshr_strdata_mod , only : shr_strdata_type, shr_strdata_get_stream_pointer + use dshr_mod , only : dshr_restart_read, dshr_restart_write + use dshr_strdata_mod , only : shr_strdata_type + use dshr_fldlist_mod , only : fldlist_type, dshr_fldlist_add + + implicit none + private ! except + + public :: datm_datamode_cplhist_advertise + public :: datm_datamode_cplhist_init_pointers + public :: datm_datamode_cplhist_advance + public :: datm_datamode_cplhist_restart_write + public :: datm_datamode_cplhist_restart_read + + ! export state data + real(r8), pointer :: Sa_z(:) => null() + real(r8), pointer :: Sa_u(:) => null() + real(r8), pointer :: Sa_v(:) => null() + real(r8), pointer :: Sa_tbot(:) => null() + real(r8), pointer :: Sa_ptem(:) => null() + real(r8), pointer :: Sa_shum(:) => null() + real(r8), pointer :: Sa_shum_wiso(:,:) => null() ! water isotopes + real(r8), pointer :: Sa_dens(:) => null() + real(r8), pointer :: Sa_pbot(:) => null() + real(r8), pointer :: Sa_pslv(:) => null() + real(r8), pointer :: Faxa_lwdn(:) => null() + real(r8), pointer :: Faxa_rainc(:) => null() + real(r8), pointer :: Faxa_rainl(:) => null() + real(r8), pointer :: Faxa_snowc(:) => null() + real(r8), pointer :: Faxa_snowl(:) => null() + real(r8), pointer :: Faxa_swndr(:) => null() + real(r8), pointer :: Faxa_swndf(:) => null() + real(r8), pointer :: Faxa_swvdr(:) => null() + real(r8), pointer :: Faxa_swvdf(:) => null() + real(r8), pointer :: Faxa_swnet(:) => null() + + character(*), parameter :: nullstr = 'null' + character(*), parameter :: rpfile = 'rpointer.atm' + character(*), parameter :: u_FILE_u = & + __FILE__ + +!=============================================================================== +contains +!=============================================================================== + + subroutine datm_datamode_cplhist_advertise(exportState, fldsexport, flds_scalar_name, & + flds_co2, flds_wiso, presaero, rc) + + ! input/output variables + type(esmf_State) , intent(inout) :: exportState + type(fldlist_type) , pointer :: fldsexport + logical , intent(in) :: flds_co2 + logical , intent(in) :: flds_wiso + logical , intent(in) :: presaero + character(len=*) , intent(in) :: flds_scalar_name + integer , intent(out) :: rc + + ! local variables + type(fldlist_type), pointer :: fldList + !------------------------------------------------------------------------------- + + rc = ESMF_SUCCESS + + call dshr_fldList_add(fldsExport, trim(flds_scalar_name)) + call dshr_fldList_add(fldsExport, 'Sa_topo' ) + call dshr_fldList_add(fldsExport, 'Sa_z' ) + call dshr_fldList_add(fldsExport, 'Sa_u' ) + call dshr_fldList_add(fldsExport, 'Sa_v' ) + call dshr_fldList_add(fldsExport, 'Sa_ptem' ) + call dshr_fldList_add(fldsExport, 'Sa_dens' ) + call dshr_fldList_add(fldsExport, 'Sa_pslv' ) + call dshr_fldList_add(fldsExport, 'Sa_tbot' ) + call dshr_fldList_add(fldsExport, 'Sa_pbot' ) + call dshr_fldList_add(fldsExport, 'Sa_shum' ) + call dshr_fldList_add(fldsExport, 'Faxa_rainc' ) + call dshr_fldList_add(fldsExport, 'Faxa_rainl' ) + call dshr_fldList_add(fldsExport, 'Faxa_snowc' ) + call dshr_fldList_add(fldsExport, 'Faxa_snowl' ) + call dshr_fldList_add(fldsExport, 'Faxa_swndr' ) + call dshr_fldList_add(fldsExport, 'Faxa_swvdr' ) + call dshr_fldList_add(fldsExport, 'Faxa_swndf' ) + call dshr_fldList_add(fldsExport, 'Faxa_swvdf' ) + call dshr_fldList_add(fldsExport, 'Faxa_swnet' ) + call dshr_fldList_add(fldsExport, 'Faxa_lwdn' ) + call dshr_fldList_add(fldsExport, 'Faxa_swdn' ) + if (flds_co2) then + call dshr_fldList_add(fldsExport, 'Sa_co2prog') + call dshr_fldList_add(fldsExport, 'Sa_co2diag') + end if + if (presaero) then + call dshr_fldList_add(fldsExport, 'Faxa_bcph' , ungridded_lbound=1, ungridded_ubound=3) + call dshr_fldList_add(fldsExport, 'Faxa_ocph' , ungridded_lbound=1, ungridded_ubound=3) + call dshr_fldList_add(fldsExport, 'Faxa_dstwet' , ungridded_lbound=1, ungridded_ubound=4) + call dshr_fldList_add(fldsExport, 'Faxa_dstdry' , ungridded_lbound=1, ungridded_ubound=4) + end if + if (flds_wiso) then + call dshr_fldList_add(fldsExport, 'Faxa_rainc_wiso', ungridded_lbound=1, ungridded_ubound=3) + call dshr_fldList_add(fldsExport, 'Faxa_rainl_wiso', ungridded_lbound=1, ungridded_ubound=3) + call dshr_fldList_add(fldsExport, 'Faxa_snowc_wiso', ungridded_lbound=1, ungridded_ubound=3) + call dshr_fldList_add(fldsExport, 'Faxa_snowl_wiso', ungridded_lbound=1, ungridded_ubound=3) + call dshr_fldList_add(fldsExport, 'Faxa_shum_wiso' , ungridded_lbound=1, ungridded_ubound=3) + end if + + fldlist => fldsExport ! the head of the linked list + do while (associated(fldlist)) + call NUOPC_Advertise(exportState, standardName=fldlist%stdname, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call ESMF_LogWrite('(datm_comp_advertise): Fr_atm'//trim(fldList%stdname), ESMF_LOGMSG_INFO) + fldList => fldList%next + enddo + + end subroutine datm_datamode_cplhist_advertise + + !=============================================================================== + subroutine datm_datamode_cplhist_init_pointers(importState, exportState, sdat, rc) + + ! input/output variables + type(ESMF_State) , intent(inout) :: importState + type(ESMF_State) , intent(inout) :: exportState + type(shr_strdata_type) , intent(in) :: sdat + integer , intent(out) :: rc + + ! local variables + type(ESMF_StateItem_Flag) :: itemFlag + character(len=*), parameter :: subname='(datm_init_pointers): ' + !------------------------------------------------------------------------------- + + rc = ESMF_SUCCESS + + ! get export state pointers + call dshr_state_getfldptr(exportState, 'Sa_z' , fldptr1=Sa_z , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Sa_u' , fldptr1=Sa_u , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Sa_v' , fldptr1=Sa_v , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Sa_tbot' , fldptr1=Sa_tbot , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Sa_pbot' , fldptr1=Sa_pbot , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Sa_pslv' , fldptr1=Sa_pslv , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Sa_ptem' , fldptr1=Sa_ptem , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Sa_shum' , fldptr1=Sa_shum , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Sa_dens' , fldptr1=Sa_dens , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Faxa_rainc' , fldptr1=Faxa_rainc , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Faxa_rainl' , fldptr1=Faxa_rainl , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Faxa_snowc' , fldptr1=Faxa_snowc , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Faxa_snowl' , fldptr1=Faxa_snowl , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Faxa_swvdr' , fldptr1=Faxa_swvdr , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Faxa_swvdf' , fldptr1=Faxa_swvdf , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Faxa_swndr' , fldptr1=Faxa_swndr , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Faxa_swndf' , fldptr1=Faxa_swndf , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Faxa_swnet' , fldptr1=Faxa_swnet , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Faxa_lwdn' , fldptr1=Faxa_lwdn , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + + end subroutine datm_datamode_cplhist_init_pointers + + !=============================================================================== + subroutine datm_datamode_cplhist_advance(masterproc, logunit, mpicom, rc) + + ! input/output variables + logical , intent(in) :: masterproc + integer , intent(in) :: logunit + integer , intent(in) :: mpicom + integer , intent(out) :: rc + + ! local variables + character(len=*), parameter :: subname='(datm_datamode_cplhist_advance): ' + !------------------------------------------------------------------------------- + + rc = ESMF_SUCCESS + + ! For now - do nothing special + + end subroutine datm_datamode_cplhist_advance + + !=============================================================================== + subroutine datm_datamode_cplhist_restart_write(case_name, inst_suffix, ymd, tod, & + logunit, my_task, sdat) + + ! input/output variables + character(len=*) , intent(in) :: case_name + character(len=*) , intent(in) :: inst_suffix + integer , intent(in) :: ymd ! model date + integer , intent(in) :: tod ! model sec into model date + integer , intent(in) :: logunit + integer , intent(in) :: my_task + type(shr_strdata_type) , intent(inout) :: sdat + !------------------------------------------------------------------------------- + + call dshr_restart_write(rpfile, case_name, 'datm', inst_suffix, ymd, tod, & + logunit, my_task, sdat) + + end subroutine datm_datamode_cplhist_restart_write + + !=============================================================================== + subroutine datm_datamode_cplhist_restart_read(rest_filem, inst_suffix, logunit, my_task, mpicom, sdat) + + ! input/output arguments + character(len=*) , intent(inout) :: rest_filem + character(len=*) , intent(in) :: inst_suffix + integer , intent(in) :: logunit + integer , intent(in) :: my_task + integer , intent(in) :: mpicom + type(shr_strdata_type) , intent(inout) :: sdat + !------------------------------------------------------------------------------- + + call dshr_restart_read(rest_filem, rpfile, inst_suffix, nullstr, logunit, my_task, mpicom, sdat) + + end subroutine datm_datamode_cplhist_restart_read + +end module datm_datamode_cplhist_mod diff --git a/streams/dshr_strdata_mod.F90 b/streams/dshr_strdata_mod.F90 index 9a6d9af80..20299b2c7 100644 --- a/streams/dshr_strdata_mod.F90 +++ b/streams/dshr_strdata_mod.F90 @@ -78,7 +78,7 @@ module dshr_strdata_mod integer :: stream_ub ! index of the Upperbound (UB) in fldlist_stream type(ESMF_Field) :: field_stream ! a field on the stream data domain type(ESMF_Field) :: stream_vector ! a vector field on the stream data domain - type(ESMF_FieldBundle), allocatable :: fldbun_data(:) ! stream field bundle interpolated to model grid + type(ESMF_FieldBundle), allocatable :: fldbun_data(:) ! stream field bundle interpolated to model grid spatially type(ESMF_FieldBundle) :: fldbun_model ! stream n field bundle interpolated to model grid and time integer :: ucomp = -1 ! index of vector u in stream integer :: vcomp = -1 ! index of vector v in stream @@ -174,8 +174,8 @@ subroutine shr_strdata_init_from_xml(sdat, xmlfilename, model_mesh, clock, compn integer :: localPet character(len=*), parameter :: subname='(shr_strdata_init_from_xml)' ! ---------------------------------------------- - rc = ESMF_SUCCESS + call ESMF_LogWrite(subname//' called', ESMF_LOGMSG_INFO) ! Initialize log unit sdat%logunit = logunit @@ -291,6 +291,7 @@ subroutine shr_strdata_init_model_domain( sdat, rc) integer :: spatialDim ! number of dimension in mesh integer :: numOwnedElements ! local size of mesh real(r8), allocatable :: ownedElemCoords(:) ! mesh lat and lons + character(len=*), parameter :: subname='(shr_strdata_init_model_domain)' ! ---------------------------------------------- rc = ESMF_SUCCESS @@ -361,9 +362,7 @@ subroutine shr_strdata_init(sdat, model_clock, rc) integer :: nvars integer :: i, stream_nlev, index character(CL) :: stream_vectors - character(len=*), parameter :: subname='(shr_strdata_mod:shr_sdat_init)' - character(*) , parameter :: F00 = "('(shr_sdat_init) ',a)" - character(*) , parameter :: F01 = "('(shr_sdat) ',a,2x,i8)" + character(len=*), parameter :: subname='(shr_sdat_init)' ! ---------------------------------------------- rc = ESMF_SUCCESS @@ -387,14 +386,14 @@ subroutine shr_strdata_init(sdat, model_clock, rc) if (filename /= 'none' .and. masterproc) then inquire(file=trim(filename),exist=fileExists) if (.not. fileExists) then - write(sdat%logunit,F00) "ERROR: file does not exist: ", trim(fileName) + write(sdat%logunit,'(a)') "ERROR: file does not exist: "//trim(fileName) call shr_sys_abort(subName//"ERROR: file does not exist: "//trim(fileName)) end if endif if(filename /= 'none') then stream_mesh = ESMF_MeshCreate(trim(filename), fileformat=ESMF_FILEFORMAT_ESMFMESH, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return endif - if (ChkErr(rc,__LINE__,u_FILE_u)) return ! Determine the number of stream levels call shr_strdata_get_stream_nlev(sdat, ns, rc=rc) @@ -492,39 +491,42 @@ subroutine shr_strdata_init(sdat, model_clock, rc) end if endif - ! TODO: why not just use fldbun_model rather than fldbun_data - + ! Why not use fldbun_model rather than fldbun_data? index = sdat%pstrm(ns)%stream_lb call dshr_fldbun_getFieldN(sdat%pstrm(ns)%fldbun_data(index), 1, lfield_dst, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return - if (trim(sdat%stream(ns)%mapalgo) == "bilinear") then - call ESMF_FieldRegridStore(sdat%pstrm(ns)%field_stream, lfield_dst, & - routehandle=sdat%pstrm(ns)%routehandle, & - regridmethod=ESMF_REGRIDMETHOD_BILINEAR, & - polemethod=ESMF_POLEMETHOD_ALLAVG, & - extrapMethod=ESMF_EXTRAPMETHOD_NEAREST_STOD, & - dstMaskValues = (/0/), & ! ignore destination points where the mask is 0 - srcMaskValues = (/0/), & ! ignore source points where the mask is 0 - srcTermProcessing=srcTermProcessing_Value, ignoreDegenerate=.true., rc=rc) - if (chkerr(rc,__LINE__,u_FILE_u)) return - else if (trim(sdat%stream(ns)%mapalgo) == 'redist') then - call ESMF_FieldRedistStore(sdat%pstrm(ns)%field_stream, lfield_dst, & - routehandle=sdat%pstrm(ns)%routehandle, & - ignoreUnmatchedIndices = .true., rc=rc) - if (chkerr(rc,__LINE__,u_FILE_u)) return - else if (trim(sdat%stream(ns)%mapalgo) == 'nn') then - call ESMF_FieldReGridStore(sdat%pstrm(ns)%field_stream, lfield_dst, & - routehandle=sdat%pstrm(ns)%routehandle, & - regridmethod=ESMF_REGRIDMETHOD_NEAREST_STOD, & - dstMaskValues = (/0/), & ! ignore destination points where the mask is 0 - srcMaskValues = (/0/), & ! ignore source points where the mask is 0 - srcTermProcessing=srcTermProcessing_Value, ignoreDegenerate=.true., & - unmappedaction=ESMF_UNMAPPEDACTION_IGNORE, rc=rc) - else if (trim(sdat%stream(ns)%mapalgo) == 'none') then - ! single point stream data, no action required. + if (.not. ESMF_MeshIsCreated(stream_mesh)) then + sdat%stream(ns)%mapalgo = 'none' else - call shr_sys_abort('ERROR: map algo '//trim(sdat%stream(ns)%mapalgo)//' is not supported') + if (trim(sdat%stream(ns)%mapalgo) == "bilinear") then + call ESMF_FieldRegridStore(sdat%pstrm(ns)%field_stream, lfield_dst, & + routehandle=sdat%pstrm(ns)%routehandle, & + regridmethod=ESMF_REGRIDMETHOD_BILINEAR, & + polemethod=ESMF_POLEMETHOD_ALLAVG, & + extrapMethod=ESMF_EXTRAPMETHOD_NEAREST_STOD, & + dstMaskValues = (/0/), & ! ignore destination points where the mask is 0 + srcMaskValues = (/0/), & ! ignore source points where the mask is 0 + srcTermProcessing=srcTermProcessing_Value, ignoreDegenerate=.true., rc=rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + else if (trim(sdat%stream(ns)%mapalgo) == 'redist') then + call ESMF_FieldRedistStore(sdat%pstrm(ns)%field_stream, lfield_dst, & + routehandle=sdat%pstrm(ns)%routehandle, & + ignoreUnmatchedIndices = .true., rc=rc) + if (chkerr(rc,__LINE__,u_FILE_u)) return + else if (trim(sdat%stream(ns)%mapalgo) == 'nn') then + call ESMF_FieldReGridStore(sdat%pstrm(ns)%field_stream, lfield_dst, & + routehandle=sdat%pstrm(ns)%routehandle, & + regridmethod=ESMF_REGRIDMETHOD_NEAREST_STOD, & + dstMaskValues = (/0/), & ! ignore destination points where the mask is 0 + srcMaskValues = (/0/), & ! ignore source points where the mask is 0 + srcTermProcessing=srcTermProcessing_Value, ignoreDegenerate=.true., & + unmappedaction=ESMF_UNMAPPEDACTION_IGNORE, rc=rc) + else if (trim(sdat%stream(ns)%mapalgo) == 'none') then + ! single point stream data, no action required. + else + call shr_sys_abort('ERROR: map algo '//trim(sdat%stream(ns)%mapalgo)//' is not supported') + end if end if end do ! end of loop over streams @@ -1345,6 +1347,7 @@ subroutine shr_strdata_readstrm(sdat, per_stream, stream, fldbun_data, & if (ESMF_MeshIsCreated(per_stream%stream_mesh)) then if (.not. per_stream%stream_pio_iodesc_set) then + if (sdat%masterproc) write(sdat%logunit,F00) 'setting pio descriptor : ',trim(filename) call shr_strdata_set_stream_iodesc(sdat, per_stream, trim(per_stream%fldlist_stream(1)), & pioid, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return @@ -1374,7 +1377,7 @@ subroutine shr_strdata_readstrm(sdat, per_stream, stream, fldbun_data, & call ESMF_TraceRegionEnter(trim(istr)//'_readpio') if (sdat%masterproc) then - write(sdat%logunit,F02) 'file ' // trim(boundstr) //': ',trim(filename), nt + write(sdat%logunit,F02) 'reading file ' // trim(boundstr) //': ',trim(filename), nt endif if(per_stream%ucomp > 0 .and. per_stream%vcomp > 0) then From 173975123c5191887b8d63c2420cdeb71795a113 Mon Sep 17 00:00:00 2001 From: Mariana Vertenstein Date: Sun, 10 Jan 2021 12:24:20 -0700 Subject: [PATCH 129/153] fixed problems related to taxmode and dtlimit for DATM%PTCLM versus just a 1x1 grid with global forcing data --- datm/cime_config/stream_definition_datm.xml | 188 +++----------------- 1 file changed, 20 insertions(+), 168 deletions(-) diff --git a/datm/cime_config/stream_definition_datm.xml b/datm/cime_config/stream_definition_datm.xml index 2606ca3ac..cda48e175 100644 --- a/datm/cime_config/stream_definition_datm.xml +++ b/datm/cime_config/stream_definition_datm.xml @@ -218,11 +218,9 @@ cycle - extend 1.5 - 1.e30 single @@ -252,11 +250,9 @@ cycle - extend 1.5 - 1.e30 single @@ -290,11 +286,9 @@ cycle - extend 1.5 - 1.e30 single @@ -316,7 +310,6 @@ null bilinear - nn null $DATM_CLMNCEP_YR_ALIGN @@ -328,11 +321,9 @@ cycle - extend 1.5 - 1.e30 single @@ -350,7 +341,6 @@ null bilinear - nn null $DATM_CLMNCEP_YR_ALIGN @@ -362,11 +352,9 @@ cycle - extend 1.5 - 1.e30 single @@ -399,11 +387,9 @@ cycle - extend 1.5 - 1.e30 single @@ -437,11 +423,9 @@ cycle - extend 1.5 - 1.e30 single @@ -471,11 +455,9 @@ cycle - extend 1.5 - 1.e30 single @@ -508,11 +490,9 @@ cycle - extend 1.5 - 1.e30 single @@ -546,11 +526,9 @@ cycle - extend 1.5 - 1.e30 single @@ -580,11 +558,9 @@ cycle - extend 1.5 - 1.e30 single @@ -617,11 +593,9 @@ cycle - extend 1.5 - 1.e30 single @@ -895,11 +869,9 @@ cycle - extend 1.5 - 1.e30 single @@ -929,11 +901,9 @@ cycle - extend 1.5 - 1.e30 single @@ -963,11 +933,9 @@ cycle - extend 1.5 - 1.e30 single @@ -1001,11 +969,9 @@ cycle - extend 1.5 - 1.e30 single @@ -1035,11 +1001,9 @@ cycle - extend 1.5 - 1.e30 single @@ -1069,11 +1033,9 @@ cycle - extend 1.5 - 1.e30 single @@ -1103,11 +1065,9 @@ cycle - extend 1.5 - 1.e30 single @@ -1137,11 +1097,9 @@ cycle - extend 1.5 - 1.e30 single @@ -1171,11 +1129,9 @@ cycle - extend 1.5 - 1.e30 single @@ -1205,11 +1161,9 @@ cycle - extend 1.5 - 1.e30 single @@ -1239,11 +1193,9 @@ cycle - extend 1.5 - 1.e30 single @@ -1279,11 +1231,9 @@ cycle - extend 1.5 - 1.e30 single @@ -1313,11 +1263,9 @@ cycle - extend 1.5 - 1.e30 single @@ -1352,11 +1300,9 @@ cycle - extend 1.5 - 1.e30 single @@ -1390,11 +1336,9 @@ cycle - extend 1.5 - 1.e30 single @@ -1424,11 +1368,9 @@ cycle - extend 1.5 - 1.e30 single @@ -1458,11 +1400,9 @@ cycle - extend 1.5 - 1.e30 single @@ -1492,11 +1432,9 @@ cycle - extend 1.5 - 1.e30 single @@ -1526,11 +1464,9 @@ cycle - extend 1.5 - 1.e30 single @@ -1560,11 +1496,9 @@ cycle - extend 1.5 - 1.e30 single @@ -1594,11 +1528,9 @@ cycle - extend 1.5 - 1.e30 single @@ -1628,11 +1560,9 @@ cycle - extend 1.5 - 1.e30 single @@ -1662,11 +1592,9 @@ cycle - extend 1.5 - 1.e30 single @@ -1696,11 +1624,9 @@ cycle - extend 1.5 - 1.e30 single @@ -1731,11 +1657,9 @@ cycle - extend 1.5 - 1.e30 single @@ -1766,11 +1690,9 @@ cycle - extend 1.5 - 1.e30 single @@ -1801,11 +1723,9 @@ cycle - extend 1.5 - 1.e30 single @@ -1836,11 +1756,9 @@ cycle - extend 1.5 - 1.e30 single @@ -1873,11 +1791,9 @@ cycle - extend 1.5 - 1.e30 single @@ -1910,11 +1826,9 @@ cycle - extend 1.5 - 1.e30 single @@ -1947,11 +1861,9 @@ cycle - extend 1.5 - 1.e30 single @@ -1984,11 +1896,9 @@ cycle - extend 1.5 - 1.e30 single @@ -2021,11 +1931,9 @@ cycle - extend 1.5 - 1.e30 single @@ -2058,11 +1966,9 @@ cycle - extend 1.5 - 1.e30 single @@ -2092,7 +1998,6 @@ cycle - extend 1.e30 @@ -2137,11 +2042,9 @@ cycle - extend 1.5 - 1.e30 single @@ -2171,11 +2074,9 @@ cycle - extend 1.5 - 1.e30 single @@ -2205,11 +2106,9 @@ cycle - extend 1.5 - 1.e30 single @@ -2239,11 +2138,9 @@ cycle - extend 1.5 - 1.e30 single @@ -2273,11 +2170,9 @@ cycle - extend 1.5 - 1.e30 single @@ -2307,11 +2202,9 @@ cycle - extend 1.5 - 1.e30 single @@ -2341,11 +2234,9 @@ cycle - extend 1.5 - 1.e30 single @@ -2375,11 +2266,9 @@ cycle - extend 1.5 - 1.e30 single @@ -2409,7 +2298,6 @@ cycle - extend 1.e30 @@ -2481,11 +2369,9 @@ cycle - extend 1.5 - 1.e30 single @@ -2509,7 +2395,6 @@ null none - nn null 1850 @@ -2521,7 +2406,6 @@ extend - extend 1.e30 @@ -2542,7 +2426,6 @@ null none - nn null 213 @@ -2553,12 +2436,10 @@ linear - cycle - extend + extend - 1.5 - 1.e30 + 1.e30 single @@ -2576,7 +2457,6 @@ null none - nn null 198 @@ -2587,12 +2467,10 @@ linear - cycle - extend + extend - 1.5 - 1.e30 + 1.e30 single @@ -2622,7 +2500,6 @@ extend - extend 1.e30 @@ -2655,7 +2532,6 @@ extend - extend 1.e30 @@ -2688,7 +2564,6 @@ extend - extend 1.e30 @@ -2721,7 +2596,6 @@ extend - extend 1.e30 @@ -2754,7 +2628,6 @@ extend - extend 1.e30 @@ -2787,7 +2660,6 @@ extend - extend 1.e30 @@ -2820,7 +2692,6 @@ extend - extend 1.e30 @@ -2853,7 +2724,6 @@ extend - extend 1.e30 @@ -2886,7 +2756,6 @@ extend - extend 1.e30 @@ -2919,7 +2788,6 @@ extend - extend 1.e30 @@ -2952,7 +2820,6 @@ extend - extend 1.e30 @@ -2985,7 +2852,6 @@ extend - extend 1.e30 @@ -3018,7 +2884,6 @@ extend - extend 1.e30 @@ -3051,7 +2916,6 @@ extend - extend 1.e30 @@ -3084,7 +2948,6 @@ extend - extend 1.e30 @@ -3117,7 +2980,6 @@ extend - extend 1.e30 @@ -3156,7 +3018,6 @@ bilinear nn - nn null 1 @@ -3168,11 +3029,11 @@ cycle - extend + extend 1.5 - 1.e30 + 1.e30 single @@ -3204,7 +3065,6 @@ bilinear nn - nn null 1 @@ -3216,11 +3076,11 @@ cycle - extend + extend 1.5 - 1.e30 + 1.e30 single @@ -3252,7 +3112,6 @@ bilinear nn - nn null 1 @@ -3264,11 +3123,11 @@ cycle - extend + extend 1.5 - 1.e30 + 1.e30 single @@ -3311,11 +3170,11 @@ cycle - extend + extend 1.5 - 1.e30 + 1.e30 single @@ -3358,11 +3217,11 @@ cycle - extend + extend 1.5 - 1.e30 + 1.e30 single @@ -3405,11 +3264,11 @@ cycle - extend + extend 1.5 - 1.e30 + 1.e30 single @@ -3452,10 +3311,11 @@ cycle - extend + extend 1.5 + 1.e30 single @@ -3498,11 +3358,11 @@ cycle - extend + extend 1.5 - 1.e30 + 1.e30 single @@ -3582,7 +3442,6 @@ cycle - extend 3.0 @@ -3627,7 +3486,6 @@ cycle - extend 3.0 @@ -3663,7 +3521,6 @@ cycle - extend 3.0 @@ -3700,7 +3557,6 @@ cycle - extend 3.0 @@ -3741,7 +3597,6 @@ cycle - extend 3.0 @@ -3775,7 +3630,6 @@ cycle - extend 3.0 @@ -3816,11 +3670,9 @@ cycle - extend 1.5 - 1.e30 single From f4bec309ebc86a02383d27632d2e299f68666218 Mon Sep 17 00:00:00 2001 From: Mariana Vertenstein Date: Sun, 10 Jan 2021 12:24:53 -0700 Subject: [PATCH 130/153] finished adding datm_datamode_cplhist_mod.F90 --- cime_config/stream_cdeps.py | 9 +++++-- cime_config/streams_v2.0.xsd | 19 ++++++++----- datm/CMakeLists.txt | 1 + datm/atm_comp_nuopc.F90 | 27 +++++++++++++++++++ dlnd/cime_config/buildnml | 1 - dlnd/cime_config/namelist_definition_dlnd.xml | 5 ++-- dlnd/lnd_comp_nuopc.F90 | 1 - docn/cime_config/namelist_definition_docn.xml | 2 +- 8 files changed, 50 insertions(+), 15 deletions(-) diff --git a/cime_config/stream_cdeps.py b/cime_config/stream_cdeps.py index 9f69f6693..3cbb2aa0b 100644 --- a/cime_config/stream_cdeps.py +++ b/cime_config/stream_cdeps.py @@ -99,8 +99,12 @@ def create_stream_xml(self, stream_names, case, streams_xml_file, data_list_file stream_datafiles = child.xml_element.text stream_datafiles = self._resolve_values(case, stream_datafiles) if 'first_year' in child.xml_element.attrib and 'last_year' in child.xml_element.attrib: - stream_year_first= int(child.xml_element.get('first_year')) - stream_year_last = int(child.xml_element.get('last_year')) + value = child.xml_element.get('first_year') + value = self._resolve_values(case, value) + stream_year_first= int(value) + value = child.xml_element.get('last_year') + value = self._resolve_values(case, value) + stream_year_last = int(value) year_first = max(stream_year_first, data_year_first) year_last = min(stream_year_last, data_year_last) stream_datafiles = self._sub_paths(stream_datafiles, year_first, year_last) @@ -117,6 +121,7 @@ def create_stream_xml(self, stream_names, case, streams_xml_file, data_list_file or node_name == 'stream_taxmode' or node_name == 'stream_dtlimit'): attributes['model_grid'] = case.get_value("GRID") + attributes['compset'] = case.get_value("COMPSET") value = self._get_value_match(node, node_name[7:], attributes=attributes) value = self._resolve_values(case, value) value = value.strip() diff --git a/cime_config/streams_v2.0.xsd b/cime_config/streams_v2.0.xsd index 2509cf25c..1197a1319 100644 --- a/cime_config/streams_v2.0.xsd +++ b/cime_config/streams_v2.0.xsd @@ -6,9 +6,10 @@ - - + + + @@ -16,9 +17,9 @@ - - - + + + @@ -32,13 +33,13 @@ - + - + @@ -76,6 +77,7 @@ + @@ -100,6 +102,7 @@ + @@ -125,6 +128,7 @@ + @@ -142,6 +146,7 @@ + diff --git a/datm/CMakeLists.txt b/datm/CMakeLists.txt index a39d02e23..d003dde8a 100644 --- a/datm/CMakeLists.txt +++ b/datm/CMakeLists.txt @@ -2,6 +2,7 @@ project(datm Fortran) add_library(datm atm_comp_nuopc.F90 datm_datamode_clmncep_mod.F90 + datm_datamode_cplhist_mod.F90 datm_datamode_core2_mod.F90 datm_datamode_jra_mod.F90 datm_datamode_era5_mod.F90) diff --git a/datm/atm_comp_nuopc.F90 b/datm/atm_comp_nuopc.F90 index 0b0103807..eb5ce0b29 100644 --- a/datm/atm_comp_nuopc.F90 +++ b/datm/atm_comp_nuopc.F90 @@ -26,21 +26,31 @@ module atm_comp_nuopc use dshr_mod , only : dshr_orbital_init, dshr_orbital_update use dshr_dfield_mod , only : dfield_type, dshr_dfield_add, dshr_dfield_copy use dshr_fldlist_mod , only : fldlist_type, dshr_fldlist_add, dshr_fldlist_realize + use datm_datamode_core2_mod , only : datm_datamode_core2_advertise use datm_datamode_core2_mod , only : datm_datamode_core2_init_pointers use datm_datamode_core2_mod , only : datm_datamode_core2_advance use datm_datamode_core2_mod , only : datm_datamode_core2_restart_write use datm_datamode_core2_mod , only : datm_datamode_core2_restart_read + use datm_datamode_jra_mod , only : datm_datamode_jra_advertise use datm_datamode_jra_mod , only : datm_datamode_jra_init_pointers use datm_datamode_jra_mod , only : datm_datamode_jra_advance use datm_datamode_jra_mod , only : datm_datamode_jra_restart_write use datm_datamode_jra_mod , only : datm_datamode_jra_restart_read + use datm_datamode_clmncep_mod , only : datm_datamode_clmncep_advertise use datm_datamode_clmncep_mod , only : datm_datamode_clmncep_init_pointers use datm_datamode_clmncep_mod , only : datm_datamode_clmncep_advance use datm_datamode_clmncep_mod , only : datm_datamode_clmncep_restart_write use datm_datamode_clmncep_mod , only : datm_datamode_clmncep_restart_read + + use datm_datamode_cplhist_mod , only : datm_datamode_cplhist_advertise + use datm_datamode_cplhist_mod , only : datm_datamode_cplhist_init_pointers + use datm_datamode_cplhist_mod , only : datm_datamode_cplhist_advance + use datm_datamode_cplhist_mod , only : datm_datamode_cplhist_restart_write + use datm_datamode_cplhist_mod , only : datm_datamode_cplhist_restart_read + use datm_datamode_era5_mod , only : datm_datamode_era5_advertise use datm_datamode_era5_mod , only : datm_datamode_era5_init_pointers use datm_datamode_era5_mod , only : datm_datamode_era5_advance @@ -284,6 +294,7 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) trim(datamode) == 'CORE2_IAF' .or. & trim(datamode) == 'CORE_IAF_JRA' .or. & trim(datamode) == 'CLMNCEP' .or. & + trim(datamode) == 'CPLHIST' .or. & trim(datamode) == 'ERA5') then else call shr_sys_abort(' ERROR illegal datm datamode = '//trim(datamode)) @@ -302,6 +313,10 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) call datm_datamode_clmncep_advertise(exportState, fldsExport, flds_scalar_name, & flds_co2, flds_wiso, flds_presaero, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return + case ('CPLHIST') + call datm_datamode_cplhist_advertise(exportState, fldsExport, flds_scalar_name, & + flds_co2, flds_wiso, flds_presaero, rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return case ('ERA5') call datm_datamode_era5_advertise(exportState, fldsExport, flds_scalar_name, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return @@ -538,6 +553,9 @@ subroutine datm_comp_run(importState, exportState, target_ymd, target_tod, targe case('CLMNCEP') call datm_datamode_clmncep_init_pointers(importState, exportState, sdat, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return + case('CPLHIST') + call datm_datamode_cplhist_init_pointers(importState, exportState, sdat, rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return case('ERA5') call datm_datamode_era5_init_pointers(exportState, sdat, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return @@ -552,6 +570,8 @@ subroutine datm_comp_run(importState, exportState, target_ymd, target_tod, targe call datm_datamode_jra_restart_read(restfilm, inst_suffix, logunit, my_task, mpicom, sdat) case('CLMNCEP') call datm_datamode_clmncep_restart_read(restfilm, inst_suffix, logunit, my_task, mpicom, sdat) + case('CPLHIST') + call datm_datamode_cplhist_restart_read(restfilm, inst_suffix, logunit, my_task, mpicom, sdat) case('ERA5') call datm_datamode_era5_restart_read(restfilm, inst_suffix, logunit, my_task, mpicom, sdat) end select @@ -594,6 +614,9 @@ subroutine datm_comp_run(importState, exportState, target_ymd, target_tod, targe case('CLMNCEP') call datm_datamode_clmncep_advance(masterproc, logunit, mpicom, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return + case('CPLHIST') + call datm_datamode_cplhist_advance(masterproc, logunit, mpicom, rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return case('ERA5') call datm_datamode_era5_advance(exportstate, masterproc, logunit, mpicom, target_ymd, & target_tod, sdat%model_calendar, rc) @@ -615,6 +638,10 @@ subroutine datm_comp_run(importState, exportState, target_ymd, target_tod, targe call datm_datamode_clmncep_restart_write(case_name, inst_suffix, target_ymd, target_tod, & logunit, my_task, sdat) if (ChkErr(rc,__LINE__,u_FILE_u)) return + case('CPLHIST') + call datm_datamode_cplhist_restart_write(case_name, inst_suffix, target_ymd, target_tod, & + logunit, my_task, sdat) + if (ChkErr(rc,__LINE__,u_FILE_u)) return case('ERA5') call datm_datamode_era5_restart_write(case_name, inst_suffix, target_ymd, target_tod, & logunit, my_task, sdat) diff --git a/dlnd/cime_config/buildnml b/dlnd/cime_config/buildnml index 998959374..e6176e3bd 100755 --- a/dlnd/cime_config/buildnml +++ b/dlnd/cime_config/buildnml @@ -61,7 +61,6 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path config = {} config['dlnd_mode'] = dlnd_mode config['create_mesh'] = 'true' if case.get_value("LND_DOMAIN_MESH") == 'create_mesh' else 'false' - config['set_model_maskfile'] = 'true' if dlnd_mode == 'SCPL' or dlnd_mode == 'LCPL' else 'false' # Do not allow single column mode for drof scol_mode = True if case.get_value('PTS_MODE') else False diff --git a/dlnd/cime_config/namelist_definition_dlnd.xml b/dlnd/cime_config/namelist_definition_dlnd.xml index 954dd84f6..0072c3662 100644 --- a/dlnd/cime_config/namelist_definition_dlnd.xml +++ b/dlnd/cime_config/namelist_definition_dlnd.xml @@ -56,11 +56,10 @@ abs dlnd_nml - file specifying model mask if not obtained from input model mesh + file specifying file to use to obtain model mask - $LND_DOMAIN_MESH - $LND_DOMAIN_PATH/$LND_DOMAIN_FILE + $MASK_MESH diff --git a/dlnd/lnd_comp_nuopc.F90 b/dlnd/lnd_comp_nuopc.F90 index ad9455ff3..74ff11dc1 100644 --- a/dlnd/lnd_comp_nuopc.F90 +++ b/dlnd/lnd_comp_nuopc.F90 @@ -206,7 +206,6 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) write(logunit,F00)' model_maskfile = ',trim(model_maskfile) end if write(logunit ,*)' datamode = ',datamode - write(logunit ,*)' model_meshfile = ',trim(model_meshfile) write(logunit ,*)' nx_global = ',nx_global write(logunit ,*)' ny_global = ',ny_global write(logunit ,*)' restfilm = ',trim(restfilm) diff --git a/docn/cime_config/namelist_definition_docn.xml b/docn/cime_config/namelist_definition_docn.xml index cf2a2c193..1f062d9f0 100644 --- a/docn/cime_config/namelist_definition_docn.xml +++ b/docn/cime_config/namelist_definition_docn.xml @@ -133,7 +133,7 @@ MESH for ocn mask - + $OCN_DOMAIN_MESH $DIN_LOC_ROOT/share/meshes/gx1v6_090205_ESMFmesh.nc $DIN_LOC_ROOT/share/meshes/gx1v7_151008_ESMFmesh.nc From dd2e5d20a1274e541fdd58338a0c7f540dd305de Mon Sep 17 00:00:00 2001 From: Mariana Vertenstein Date: Sun, 10 Jan 2021 20:08:39 -0700 Subject: [PATCH 131/153] changes to fix memory growth problem --- streams/dshr_strdata_mod.F90 | 6 +- streams/dshr_stream_mod.F90 | 134 +++++++++++++++++++++-------------- 2 files changed, 82 insertions(+), 58 deletions(-) diff --git a/streams/dshr_strdata_mod.F90 b/streams/dshr_strdata_mod.F90 index 20299b2c7..524cceda1 100644 --- a/streams/dshr_strdata_mod.F90 +++ b/streams/dshr_strdata_mod.F90 @@ -856,9 +856,7 @@ subroutine shr_strdata_advance(sdat, ymd, tod, logunit, istr, timers, rc) select case(sdat%stream(ns)%readmode) case ('single') - call shr_strdata_readLBUB(sdat, ns, & - ymdmod(ns), todmod, & - newData(ns), trim(lstr)//'_readLBUB', rc=rc) + call shr_strdata_readLBUB(sdat, ns, ymdmod(ns), todmod, newData(ns), trim(lstr)//'_readLBUB', rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return case ('full_file') ! TODO: need to put in capability to read all stream data at once @@ -1203,7 +1201,7 @@ subroutine shr_strdata_readLBUB(sdat, ns, mDate, mSec, newData, istr, rc) ! if model current date is outside of model lower or upper bound - find the stream bounds if (rDateM < rDateLB .or. rDateM > rDateUB) then call ESMF_TraceRegionEnter(trim(istr)//'_fbound') - call shr_stream_findBounds(stream, mDate, mSec, & + call shr_stream_findBounds(stream, mDate, mSec, sdat%masterproc, & sdat%pstrm(ns)%ymdLB, dDateLB, sdat%pstrm(ns)%todLB, n_lb, filename_lb, & sdat%pstrm(ns)%ymdUB, dDateUB, sdat%pstrm(ns)%todUB, n_ub, filename_ub) call ESMF_TraceRegionExit(trim(istr)//'_fbound') diff --git a/streams/dshr_stream_mod.F90 b/streams/dshr_stream_mod.F90 index 0a4da07cc..e2359f103 100644 --- a/streams/dshr_stream_mod.F90 +++ b/streams/dshr_stream_mod.F90 @@ -26,7 +26,7 @@ module dshr_stream_mod use shr_cal_mod , only : shr_cal_advDate use shr_cal_mod , only : shr_cal_advdateint use dshr_methods_mod , only : chkerr - use pio , only : pio_noerr, pio_seterrorhandling, pio_inq_att, pio_openfile + use pio , only : pio_noerr, pio_seterrorhandling, pio_inq_att, pio_openfile, pio_closefile use pio , only : file_desc_t, pio_inq_varid, iosystem_desc_t, pio_file_is_open use pio , only : pio_nowrite, pio_inquire_dimension, pio_inquire_variable, pio_bcast_error use pio , only : pio_get_att, pio_get_var @@ -120,7 +120,7 @@ module dshr_stream_mod contains !=============================================================================== - subroutine shr_stream_init_from_xml(xmlfilename, streamdat, mastertask, logunit, compname, rc) + subroutine shr_stream_init_from_xml(xmlfilename, streamdat, isroot_task, logunit, compname, rc) use FoX_DOM use ESMF, only : ESMF_VM, ESMF_VMGetCurrent, ESMF_VMBroadCast, ESMF_SUCCESS @@ -154,10 +154,10 @@ subroutine shr_stream_init_from_xml(xmlfilename, streamdat, mastertask, logunit, ! input/output variables type(shr_stream_streamType) , intent(inout), pointer :: streamdat(:) - character(len=*) , intent(in) :: xmlfilename - logical , intent(in) :: mastertask integer , intent(in) :: logunit + logical , intent(in) :: isroot_task character(len=*) , intent(in) :: compname + character(len=*), optional , intent(in) :: xmlfilename integer , intent(out) :: rc ! local variables @@ -176,7 +176,7 @@ subroutine shr_stream_init_from_xml(xmlfilename, streamdat, mastertask, logunit, nstrms = 0 - if (mastertask) then + if (isroot_task) then Sdoc => parseFile(xmlfilename, iostat=status) if (status /= 0) then @@ -185,7 +185,7 @@ subroutine shr_stream_init_from_xml(xmlfilename, streamdat, mastertask, logunit, streamlist => getElementsByTagname(Sdoc, "stream_info") nstrms = getLength(streamlist) - ! allocate an array of shr_stream_streamtype objects on just mastertask + ! allocate an array of shr_stream_streamtype objects on just isroot_task allocate(streamdat(nstrms)) ! fill in non-default values for the streamdat attributes @@ -291,7 +291,7 @@ subroutine shr_stream_init_from_xml(xmlfilename, streamdat, mastertask, logunit, call ESMF_VMBroadCast(vm, tmp, 1, 0, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return nstrms = tmp(1) - if (.not. mastertask) then + if (.not. isroot_task) then allocate(streamdat(nstrms)) endif @@ -311,7 +311,7 @@ subroutine shr_stream_init_from_xml(xmlfilename, streamdat, mastertask, logunit, streamdat(i)%yearLast = tmp(4) streamdat(i)%yearAlign = tmp(5) streamdat(i)%offset = tmp(6) - if(.not. mastertask) then + if(.not. isroot_task) then allocate(streamdat(i)%file(streamdat(i)%nfiles)) allocate(streamdat(i)%varlist(streamdat(i)%nvars)) endif @@ -457,7 +457,7 @@ subroutine shr_stream_init_from_inline(streamdat, & end subroutine shr_stream_init_from_inline !=============================================================================== - subroutine shr_stream_findBounds(strm, mDateIn, secIn, & + subroutine shr_stream_findBounds(strm, mDateIn, secIn, isroot_task, & mDateLB, dDateLB, secLB, n_lb, fileLB, mDateUB, dDateUB, secUB, n_ub, fileUB) !------------------------------------------------------------------------------- @@ -471,19 +471,20 @@ subroutine shr_stream_findBounds(strm, mDateIn, secIn, & !------------------------------------------------------------------------------- ! input/output parameters: - type(shr_stream_streamType) ,intent(inout):: strm ! data stream to query - integer ,intent(in) :: mDateIn ! model date (yyyymmdd) - integer ,intent(in) :: secIn ! elapsed sec on model date - integer ,intent(out) :: mDateLB ! model date of LB - integer ,intent(out) :: dDateLB ! data date of LB - integer ,intent(out) :: secLB ! elap sec of LB - integer ,intent(out) :: n_lb ! t-coord index of LB - character(*) ,intent(out) :: fileLB ! file containing LB - integer ,intent(out) :: mDateUB ! model date of UB - integer ,intent(out) :: dDateUB ! data date of UB - integer ,intent(out) :: secUB ! elap sec of UB - integer ,intent(out) :: n_ub ! t-coord index of UB - character(*) ,intent(out) :: fileUB ! file containing UB + type(shr_stream_streamType) ,intent(inout):: strm ! data stream to query + integer ,intent(in) :: mDateIn ! model date (yyyymmdd) + integer ,intent(in) :: secIn ! elapsed sec on model date + logical ,intent(in) :: isroot_task ! is mpi task root communicator task + integer ,intent(out) :: mDateLB ! model date of LB + integer ,intent(out) :: dDateLB ! data date of LB + integer ,intent(out) :: secLB ! elap sec of LB + integer ,intent(out) :: n_lb ! t-coord index of LB + character(*) ,intent(out) :: fileLB ! file containing LB + integer ,intent(out) :: mDateUB ! model date of UB + integer ,intent(out) :: dDateUB ! data date of UB + integer ,intent(out) :: secUB ! elap sec of UB + integer ,intent(out) :: n_ub ! t-coord index of UB + character(*) ,intent(out) :: fileUB ! file containing UB ! local variables integer :: dDateIn ! model date mapped onto a data date @@ -572,7 +573,7 @@ subroutine shr_stream_findBounds(strm, mDateIn, secIn, & if (.not. strm%found_lvd) then A: do k=1,strm%nFiles if (.not. strm%file(k)%haveData) then - call shr_stream_readtCoord(strm, k, rCode) + call shr_stream_readtCoord(strm, k, isroot_task, rCode) if ( rCode /= 0 )then call shr_sys_abort(trim(subName)//" ERROR: readtCoord1") end if @@ -661,7 +662,7 @@ subroutine shr_stream_findBounds(strm, mDateIn, secIn, & B: do k=strm%nFiles,1,-1 !--- read data for file number k --- if (.not. strm%file(k)%haveData) then - call shr_stream_readtCoord(strm, k, rCode) + call shr_stream_readtCoord(strm, k, isroot_task, rCode) if ( rCode /= 0 )then call shr_sys_abort(trim(subName)//" ERROR: readtCoord2") end if @@ -771,7 +772,7 @@ subroutine shr_stream_findBounds(strm, mDateIn, secIn, & C: do k=strm%k_lvd,strm%nFiles !--- read data for file number k --- if (.not. strm%file(k)%haveData) then - call shr_stream_readtCoord(strm, k, rCode) + call shr_stream_readtCoord(strm, k, isroot_task, rCode) if ( rCode /= 0 )then call shr_sys_abort(trim(subName)//" ERROR: readtCoord3") end if @@ -905,14 +906,15 @@ subroutine shr_stream_findBounds(strm, mDateIn, secIn, & end subroutine shr_stream_findBounds !=============================================================================== - subroutine shr_stream_readTCoord(strm, k, rc) + subroutine shr_stream_readTCoord(strm, k, isroot_task, rc) ! Read in time coordinates with possible offset (require that time coordinate is 'time') ! input/output parameters: - type(shr_stream_streamType) ,intent(inout) :: strm ! data stream to query - integer ,intent(in) :: k ! stream file index - integer,optional,intent(out) :: rc ! return code + type(shr_stream_streamType) ,intent(inout) :: strm ! data stream to query + integer ,intent(in) :: k ! stream file index + logical ,intent(in) :: isroot_task + integer,optional ,intent(out) :: rc ! return code ! local variables character(CL) :: fileName ! filename to read @@ -921,7 +923,6 @@ subroutine shr_stream_readTCoord(strm, k, rc) integer :: din,dout integer :: sin,sout,offin integer :: lrc - integer :: vid,ndims,rcode integer,allocatable :: dids(:) character(CS) :: units,calendar @@ -932,15 +933,20 @@ subroutine shr_stream_readTCoord(strm, k, rc) integer :: old_handle ! previous setting of pio error handling real(R8) :: nsec ! elapsed secs on calendar date real(R8),allocatable :: tvar(:) - character(*),parameter :: subname = '(shr_stream_readTCoord) ' - character(*),parameter :: F01 = "('(shr_stream_readTCoord) ',a,2i7)" + character(*),parameter :: subname = ' (shr_stream_readTCoord) ' !------------------------------------------------------------------------------- lrc = 0 - if(.not. pio_file_is_open(strm%file(k)%fileid)) then - fileName = trim(strm%file(k)%name) - rcode = pio_openfile(strm%pio_subsystem, strm%file(k)%fileid, strm%pio_iotype, & - filename, pio_nowrite) + + ! set filename to read + fileName = trim(strm%file(k)%name) + + ! open file if needed + if (.not. pio_file_is_open(strm%file(k)%fileid)) then + if (isroot_task) then + write(strm%logunit, '(a)') trim(subname)//' opening stream filename = '//trim(filename) + end if + rcode = pio_openfile(strm%pio_subsystem, strm%file(k)%fileid, strm%pio_iotype, filename, pio_nowrite) endif rCode = pio_inq_varid(strm%file(k)%fileid, 'time', vid) @@ -953,7 +959,7 @@ subroutine shr_stream_readTCoord(strm, k, rc) deallocate(dids) ! allocate memory for date and secs - if(.not. allocated(strm%file(k)%date)) then + if (.not. allocated(strm%file(k)%date)) then allocate(strm%file(k)%date(nt), strm%file(k)%secs(nt)) else if(size(strm%file(k)%date) .ne. nt) then deallocate(strm%file(k)%date, strm%file(k)%secs) @@ -997,10 +1003,17 @@ subroutine shr_stream_readTCoord(strm, k, rc) enddo deallocate(tvar) + ! close file + if (isroot_task) then + write(strm%logunit, '(a)') trim(subname)//' closing stream filename = '//trim(filename) + end if + call pio_closefile(strm%file(k)%fileid) + ! if offset is not zero, adjust strm%file(k)%date(n) and strm%file(k)%secs(n) if (strm%offset /= 0) then if (size(strm%file(k)%date) /= size(strm%file(k)%secs)) then - write(strm%logunit,F01) "Incompatable date and secs sizes",size(strm%file(k)%date),size(strm%file(k)%secs) + write(strm%logunit,'(a,2i7)') trim(subname)//" Incompatable date and secs sizes",& + size(strm%file(k)%date), size(strm%file(k)%secs) call shr_sys_abort() endif num = size(strm%file(k)%date) @@ -1186,24 +1199,27 @@ subroutine shr_stream_getCalendar(strm, k, calendar) ! Returns calendar name ! input/output parameters: - type(shr_stream_streamType) ,intent(inout) :: strm ! data stream - integer ,intent(in) :: k ! file to query - character(*) ,intent(out) :: calendar ! calendar name + type(shr_stream_streamType) ,intent(inout) :: strm ! data stream + integer ,intent(in) :: k ! file to query + character(*) ,intent(out) :: calendar ! calendar name ! local integer :: vid, n character(CL) :: fileName,lcal integer :: old_handle integer :: rCode - character(*),parameter :: subName = '(shr_stream_getCalendar) ' + character(*),parameter :: subName = ' (shr_stream_getCalendar) ' !------------------------------------------------------------------------------- lcal = ' ' calendar = ' ' if (k > strm%nfiles) call shr_sys_abort(subname//' ERROR: k gt nfiles') - if(.not. pio_file_is_open(strm%file(k)%fileid)) then - fileName = strm%file(k)%name + fileName = strm%file(k)%name + + if (.not. pio_file_is_open(strm%file(k)%fileid)) then + ! TODO: add isroot_task + !write(strm%logunit, '(a)') trim(subname)//' opening stream filename = '//trim(filename) rcode = pio_openfile(strm%pio_subsystem, strm%file(k)%fileid, strm%pio_iotype, trim(filename)) endif @@ -1221,6 +1237,10 @@ subroutine shr_stream_getCalendar(strm, k, calendar) if (ichar(lcal(n:n)) == 0 ) lcal(n:n) = ' ' call shr_string_leftalign_and_convert_tabs(lcal) calendar = trim(shr_cal_calendarName(trim(lcal))) + + ! TODO: add isroot_task + !write(strm%logunit, '(a)') trim(subname)//' closing stream filename = '//trim(filename) + call pio_closefile(strm%file(k)%fileid) end subroutine shr_stream_getCalendar @@ -1379,20 +1399,26 @@ subroutine shr_stream_getNFiles(strm,nfiles) end subroutine shr_stream_getNFiles + !=============================================================================== subroutine shr_stream_restIO(pioid, streams, mode) + use pio, only : pio_def_dim, pio_def_var, pio_put_var, pio_get_var, file_desc_t, var_desc_t use pio, only : pio_int, pio_char - type(file_desc_t), intent(inout) :: pioid - type(shr_stream_streamType), intent(inout) :: streams(:) - character(len=*), intent(in) :: mode ! read, write, define - - type(var_desc_t) :: varid, tvarid, dvarid, ntvarid, hdvarid - integer :: rcode - integer :: dimid_stream, dimid_files,dimid_nt, dimid_str - integer :: n, k, maxnfiles=0 - integer :: maxnt = 0 + + ! input/out variables + type(file_desc_t) , intent(inout) :: pioid + type(shr_stream_streamType) , intent(inout) :: streams(:) + character(len=*) , intent(in) :: mode ! read, write, define + + ! local variables + type(var_desc_t) :: varid, tvarid, dvarid, ntvarid, hdvarid + integer :: rcode + integer :: dimid_stream, dimid_files,dimid_nt, dimid_str + integer :: n, k, maxnfiles=0 + integer :: maxnt = 0 integer, allocatable :: tmp(:) - character(len=CL) :: fname + character(len=CL) :: fname + !------------------------------------------------------------------------------- if (mode .eq. 'define') then rcode = pio_def_dim(pioid, 'strlen', CL, dimid_str) From f286f51573a2c4a4800bc6210c6a0d086a82808a Mon Sep 17 00:00:00 2001 From: Mariana Vertenstein Date: Mon, 11 Jan 2021 13:24:23 -0700 Subject: [PATCH 132/153] removed debug write statement --- docn/cime_config/buildnml | 1 - 1 file changed, 1 deletion(-) diff --git a/docn/cime_config/buildnml b/docn/cime_config/buildnml index 7947bf3d5..0c1d1b046 100755 --- a/docn/cime_config/buildnml +++ b/docn/cime_config/buildnml @@ -85,7 +85,6 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path #endif if generate_stream_file: streamlist = nmlgen.get_streams() - print "DEBUG: streamlist is ",streamlist stream_file = os.path.join(_CDEPS_CONFIG,os.pardir, "docn","cime_config","stream_definition_docn.xml") schema_file = os.path.join(_CDEPS_CONFIG,"streams_v2.0.xsd") streams = StreamCDEPS(stream_file, schema_file) From e66fde45cc4dab0efc77d03d5693f1dba5f2ca33 Mon Sep 17 00:00:00 2001 From: Mariana Vertenstein Date: Wed, 13 Jan 2021 10:24:29 -0700 Subject: [PATCH 133/153] updated missing stream mesh files --- datm/cime_config/stream_definition_datm.xml | 33 ++++++++++++--------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/datm/cime_config/stream_definition_datm.xml b/datm/cime_config/stream_definition_datm.xml index cda48e175..d7a957bc3 100644 --- a/datm/cime_config/stream_definition_datm.xml +++ b/datm/cime_config/stream_definition_datm.xml @@ -18,6 +18,11 @@ %ym => year-month from the range yearfirst to yearlast with all 12 months %ymd => year-month-day from the range yearfirst to yearlast with all 12 months + ****** + NOTE: + any entry that has %y, %ym or %ymd MUST have first_year and last_year syntax + ****** + Each mode below, except for presaero, has a set of streams associated with it The presaero stream, is associated with all modes @@ -538,7 +543,7 @@ $DIN_LOC_ROOT/atm/datm7/atm_forcing.datm7.Qian.T62.c080727/clmforc.Qian.c2006.T62.ESMFmesh_120620.nc - $DIN_LOC_ROOT/atm/datm7/atm_forcing_iso.datm7.Qian.T62.c080727/Precip6Hrly/clmforc.Qian.c2006.T62.Prec.%ym.nc + $DIN_LOC_ROOT/atm/datm7/atm_forcing_iso.datm7.Qian.T62.c080727/Precip6Hrly/clmforc.Qian.c2006.T62.Prec.%ym.nc PRECTmms Faxa_precn @@ -710,7 +715,7 @@ none - $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/mexicocityMEX.c080124/clm1pt-1993-12.nc + $DIN_LOC_ROOT/atm/datm7/CLM1PT_data/mexicocityMEX.c080124/clm1pt-1993-12.nc ZBOT Sa_z @@ -846,10 +851,10 @@ - + $DIN_LOC_ROOT/share/meshes/bias_correction_gpcp_qian.Prec_ESMFmesh_cdf5_110121.nc - $DIN_LOC_ROOT/atm/datm7/bias_correction/precip/gpcp/qian/bias_correction.Prec.%y.nc + $DIN_LOC_ROOT/atm/datm7/bias_correction/precip/gpcp/qian/bias_correction.Prec.%y.nc BC_PREC Faxa_precsf @@ -878,10 +883,10 @@ - + $DIN_LOC_ROOT/share/meshes/bias_correction_gpcp_cruncep.Prec_ESMFmesh_cdf5_110121.nc - $DIN_LOC_ROOT/atm/datm7/clm_output/cruncep_precip_1deg/gpcp_1deg_bias_correction/bias_correction.Prec.%y.nc + $DIN_LOC_ROOT/atm/datm7/clm_output/cruncep_precip_1deg/gpcp_1deg_bias_correction/bias_correction.Prec.%y.nc BC_PREC Faxa_precsf @@ -910,10 +915,10 @@ - + $DIN_LOC_ROOT/share/meshes/bias_correction_gpcp_cmap.Prec_ESMFmesh_cdf5_110121.nc - $DIN_LOC_ROOT/atm/datm7/bias_correction/precip/cmap/cruncep/bias_correction.Prec.%y.nc + $DIN_LOC_ROOT/atm/datm7/bias_correction/precip/cmap/cruncep/bias_correction.Prec.%y.nc BC_PREC Faxa_precsf @@ -3422,7 +3427,7 @@ $ATM_DOMAIN_MESH - $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x3h.%ym.nc + $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x3h.%ym.nc a2x3h_Sa_topo Sa_topo @@ -3453,7 +3458,7 @@ $ATM_DOMAIN_MESH - $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x1d.%ym.nc + $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x1d.%ym.nc a2x1d_Faxa_bcphiwet Faxa_bcphiwet @@ -3498,7 +3503,7 @@ $ATM_DOMAIN_MESH - $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x1hi.%ym.nc + $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x1hi.%ym.nc a2x1hi_Faxa_swndr Faxa_swndr @@ -3533,7 +3538,7 @@ $ATM_DOMAIN_MESH - $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x3h.%ym.nc + $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x3h.%ym.nc a2x3h_Faxa_rainc Faxa_rainc @@ -3569,7 +3574,7 @@ $ATM_DOMAIN_MESH - $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x3h.%ym.nc + $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x3h.%ym.nc a2x3h_Sa_z Sa_z @@ -3609,7 +3614,7 @@ $ATM_DOMAIN_MESH - $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x1h.%ym.nc + $DATM_CPLHIST_DIR/$DATM_CPLHIST_CASE.cpl.ha2x1h.%ym.nc a2x1h_Sa_u Sa_u From 2e7789077c44c6928ea6700a88ac99315c0f3983 Mon Sep 17 00:00:00 2001 From: Mariana Vertenstein Date: Thu, 14 Jan 2021 10:44:46 -0700 Subject: [PATCH 134/153] fixed creation of ocean mask/frac when it needs to be created --- docn/cime_config/buildnml | 2 +- docn/cime_config/namelist_definition_docn.xml | 8 ++--- dshr/dshr_mod.F90 | 32 +++++++++++-------- 3 files changed, 22 insertions(+), 20 deletions(-) diff --git a/docn/cime_config/buildnml b/docn/cime_config/buildnml index 0c1d1b046..e76b8d0c1 100755 --- a/docn/cime_config/buildnml +++ b/docn/cime_config/buildnml @@ -65,10 +65,10 @@ def _create_namelists(case, confdir, inst_string, infile, nmlgen, data_list_path # Initialize namelist defaults config = {} config['model_grid'] = model_grid - config['mask_grid'] = mask_grid config['ocn_grid'] = ocn_grid config['docn_mode'] = docn_mode config['create_mesh'] = 'true' if case.get_value("OCN_DOMAIN_MESH") == 'create_mesh' else 'false' + config['aqua_planet'] = 'true' if 'aquap' in docn_mode else 'false' scol_mode = True if case.get_value('PTS_MODE') else False nmlgen.init_defaults(infile, config) diff --git a/docn/cime_config/namelist_definition_docn.xml b/docn/cime_config/namelist_definition_docn.xml index 1f062d9f0..cd7af94c0 100644 --- a/docn/cime_config/namelist_definition_docn.xml +++ b/docn/cime_config/namelist_definition_docn.xml @@ -133,12 +133,8 @@ MESH for ocn mask - - $OCN_DOMAIN_MESH - $DIN_LOC_ROOT/share/meshes/gx1v6_090205_ESMFmesh.nc - $DIN_LOC_ROOT/share/meshes/gx1v7_151008_ESMFmesh.nc - $DIN_LOC_ROOT/share/meshes/tx0.66v1_190314_ESMFmesh.nc - $DIN_LOC_ROOT/share/meshes/tx0.25v1_190204_ESMFmesh.nc + $MASK_MESH + $ATM_DOMAIN_MESH diff --git a/dshr/dshr_mod.F90 b/dshr/dshr_mod.F90 index ed320828e..eec384601 100644 --- a/dshr/dshr_mod.F90 +++ b/dshr/dshr_mod.F90 @@ -1601,6 +1601,7 @@ subroutine dshr_set_modelmask(mesh_dst, meshfile_mask, compname, mask_dst, frac_ integer :: n, spatialDim real(r8) :: fminval = 0.001_r8 real(r8) :: fmaxval = 1._r8 + real(r8) :: lfrac,ofrac !------------------------------------------------------------------------------- rc = ESMF_SUCCESS @@ -1652,21 +1653,26 @@ subroutine dshr_set_modelmask(mesh_dst, meshfile_mask, compname, mask_dst, frac_ if (ChkErr(rc,__LINE__,u_FILE_u)) return call ESMF_FieldGet(field_dst, farrayptr=dataptr1d, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return - frac_dst(:) = dataptr1d(:) + do n = 1,lsize_dst + lfrac = 1._r8 - dataptr1d(n) + if (lfrac > fmaxval) lfrac = 1._r8 + if (lfrac < fminval) lfrac = 0._r8 + ofrac = 1._r8 - lfrac if (compname == 'LND') then - frac_dst(n) = 1._r8 - frac_dst(n) - end if - if (frac_dst(n) > fmaxval) then - frac_dst(n) = 1._r8 - end if - if (frac_dst(n) < fminval) then - frac_dst(n) = 0._r8 - end if - if (frac_dst(n) /= 0._r8) then - mask_dst(n) = 1 - else - mask_dst(n) = 0 + frac_dst(n) = lfrac + if (lfrac /= 0._r8) then + mask_dst(n) = 1 + else + mask_dst(n) = 0 + end if + else if (compname == 'OCN' .or. compname == 'ICE') then + frac_dst(n) = ofrac + if (ofrac == 0._r8) then + mask_dst(n) = 0 + else + mask_dst(n) = 1 + end if end if enddo From c39dc6a08fae561da568572d5d20429fe68d48f3 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Tue, 19 Jan 2021 08:40:48 -0700 Subject: [PATCH 135/153] add only clause i dshr_fldlist_mod and dshr_stream_mod --- dshr/dshr_fldlist_mod.F90 | 8 ++++++-- streams/dshr_stream_mod.F90 | 5 +++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/dshr/dshr_fldlist_mod.F90 b/dshr/dshr_fldlist_mod.F90 index 0edab9cee..11b0ab5e3 100644 --- a/dshr/dshr_fldlist_mod.F90 +++ b/dshr/dshr_fldlist_mod.F90 @@ -1,7 +1,11 @@ module dshr_fldlist_mod - use NUOPC - use ESMF + use NUOPC , only : NUOPC_IsConnected, NUOPC_Realize + use ESMF , only : ESMF_State, ESMF_Mesh, ESMF_Field, ESMF_Grid, ESMF_GridCreate + use ESMF , only : ESMF_SUCCESS, ESMF_LogWrite, ESMF_LOGMSG_INFO + use ESMF , only : ESMF_LOGERR_PASSTHRU, ESMF_LogFoundError + use ESMF , only : ESMF_MESHLOC_ELEMENT, ESMF_TYPEKIND_R8, ESMF_StateRemove + use ESMF , only : ESMF_Distgrid, ESMF_DistGridCreate, ESMF_FieldCreate use shr_kind_mod , only : r8=>shr_kind_r8, cs=>shr_kind_cs, cl=>shr_kind_cl, cxx=>shr_kind_cxx use dshr_methods_mod , only : chkerr diff --git a/streams/dshr_stream_mod.F90 b/streams/dshr_stream_mod.F90 index 0a4da07cc..52f4532d3 100644 --- a/streams/dshr_stream_mod.F90 +++ b/streams/dshr_stream_mod.F90 @@ -122,7 +122,8 @@ module dshr_stream_mod subroutine shr_stream_init_from_xml(xmlfilename, streamdat, mastertask, logunit, compname, rc) - use FoX_DOM + use FoX_DOM, only : extractDataContent, destroy, Node, NodeList, parseFile, getElementsByTagname + use FoX_DOM, only : getLength, item use ESMF, only : ESMF_VM, ESMF_VMGetCurrent, ESMF_VMBroadCast, ESMF_SUCCESS ! --------------------------------------------------------------------- @@ -140,7 +141,7 @@ subroutine shr_stream_init_from_xml(xmlfilename, streamdat, mastertask, logunit, ! ! ! - ! + ! ! ! ! From bf4f9daa43ad8469cac6e27170a978061fa50ad1 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Tue, 19 Jan 2021 08:47:04 -0700 Subject: [PATCH 136/153] add only to dshr_dfield_mod --- dshr/dshr_dfield_mod.F90 | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dshr/dshr_dfield_mod.F90 b/dshr/dshr_dfield_mod.F90 index 54bf02147..cc65ebef3 100644 --- a/dshr/dshr_dfield_mod.F90 +++ b/dshr/dshr_dfield_mod.F90 @@ -1,6 +1,7 @@ module dshr_dfield_mod - use ESMF + use ESMF , only : ESMF_State, ESMF_FieldBundle, ESMF_MAXSTR, ESMF_SUCCESS + use ESMF , only : ESMF_FieldBundleGet, ESMF_ITEMORDER_ADDORDER, ESMF_Field use shr_kind_mod , only : r8=>shr_kind_r8, cs=>shr_kind_cs, cl=>shr_kind_cl, cxx=>shr_kind_cxx use shr_sys_mod , only : shr_sys_abort use dshr_strdata_mod , only : shr_strdata_type, shr_strdata_get_stream_count, shr_strdata_get_stream_fieldbundle @@ -120,7 +121,7 @@ subroutine dshr_dfield_add_1d(dfields, sdat, state_fld, strm_fld, state, logunit end if end subroutine dshr_dfield_add_1d - + !=============================================================================== subroutine dshr_dfield_add_1d_stateptr(dfields, sdat, state_fld, strm_fld, state, state_ptr, logunit, masterproc, rc) From 1a5f6a11818caeffa4a26890534979e21a777db0 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Tue, 19 Jan 2021 08:57:50 -0700 Subject: [PATCH 137/153] add only clause to dshr_tinterp_mod --- streams/dshr_tinterp_mod.F90 | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/streams/dshr_tinterp_mod.F90 b/streams/dshr_tinterp_mod.F90 index 8379cd824..10fa7b847 100644 --- a/streams/dshr_tinterp_mod.F90 +++ b/streams/dshr_tinterp_mod.F90 @@ -4,10 +4,11 @@ module dshr_tInterp_mod ! data model shared time interpolation factor routines !--------------------------------------------------------------- - use ESMF + use ESMF , only : ESMF_Time, ESMF_TimeInterval, ESMF_TimeIntervalGet + use ESMF , only : ESMF_SUCCESS, operator(<), operator(-), operator(>), operator(==) use shr_kind_mod , only : i8=>shr_kind_i8, r8=>shr_kind_r8, cs=>shr_kind_cs, cl=>shr_kind_cl, shr_kind_in use shr_sys_mod , only : shr_sys_abort - use shr_cal_mod , only : shr_cal_timeSet, shr_cal_advDateInt, shr_cal_date2julian + use shr_cal_mod , only : shr_cal_timeSet, shr_cal_advDateInt, shr_cal_date2julian use shr_orb_mod , only : shr_orb_cosz, shr_orb_decl, SHR_ORB_UNDEF_REAL use shr_const_mod , only : SHR_CONST_PI use dshr_methods_mod , only : chkerr @@ -179,10 +180,10 @@ subroutine shr_tInterp_getAvgCosz(tavCosz, lon, lat, & real(r8) ,intent(in) :: obliqr ! orb param integer ,intent(in) :: modeldt ! model time step in secs character(*) ,intent(in) :: calendar ! calendar type - integer ,intent(out) :: rc ! error status + integer ,intent(out) :: rc ! error status ! local variables - real(R8), allocatable :: cosz(:) ! local cos of the zenith angle + real(R8), allocatable :: cosz(:) ! local cos of the zenith angle integer :: lsize ! size of local data type(ESMF_Time) :: reday1, reday2 ! LB, UB time type(ESMF_TimeInterval) :: timeint ! time interval @@ -295,15 +296,15 @@ subroutine shr_tInterp_getCosz(cosz, lon, lat, ymd, tod, eccen, mvelpp, lambm0, lsize = size(lon) if (lsize < 1 .or. size(lat) /= lsize .or. size(cosz) /= lsize) then - write(6,*)'ERROR: lsize,size(lat),size(cosz) = ',lsize,size(lat),size(cosz) + write(6,*)'ERROR: lsize,size(lat),size(cosz) = ',lsize,size(lat),size(cosz) call shr_sys_abort(subname//' ERROR: lon lat cosz sizes disagree') endif call shr_cal_date2julian(ymd, tod, calday, calendar) call shr_orb_decl( calday, eccen, mvelpp, lambm0, obliqr, declin, eccf ) do n = 1,lsize - lonr = lon(n) * deg2rad - latr = lat(n) * deg2rad + lonr = lon(n) * deg2rad + latr = lat(n) * deg2rad cosz(n) = max(solZenMin, shr_orb_cosz( calday, latr, lonr, declin)) end do From fc498124adf95ce6843c9ab2f5ebf8f13a12c1fa Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Tue, 19 Jan 2021 09:25:11 -0700 Subject: [PATCH 138/153] add only to dshr_strdata_mod --- streams/dshr_strdata_mod.F90 | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/streams/dshr_strdata_mod.F90 b/streams/dshr_strdata_mod.F90 index 9a6d9af80..e0d53ca6e 100644 --- a/streams/dshr_strdata_mod.F90 +++ b/streams/dshr_strdata_mod.F90 @@ -3,8 +3,20 @@ module dshr_strdata_mod ! holds data and methods to advance data models ! Obtain the model domain and the stream domain for each stream - use ESMF - + use ESMF , only : ESMF_Mesh, ESMF_RouteHandle, ESMF_Field, ESMF_FieldBundle + use ESMF , only : ESMF_Clock, ESMF_VM, ESMF_VMGet, ESMF_VMGetCurrent + use ESMF , only : ESMF_DistGrid, ESMF_SUCCESS, ESMF_MeshGet, ESMF_DistGridGet + use ESMF , only : ESMF_VMBroadCast, ESMF_MeshIsCreated, ESMF_MeshCreate + use ESMF , only : ESMF_Calendar, ESMF_CALKIND_NOLEAP, ESMF_CALKIND_GREGORIAN + use ESMF , only : ESMF_CalKind_Flag, ESMF_Time, ESMF_TimeInterval + use ESMF , only : ESMF_TimeIntervalGet, ESMF_TYPEKIND_R8, ESMF_FieldCreate + use ESMF , only : ESMF_FILEFORMAT_ESMFMESH, ESMF_FieldCreate + use ESMF , only : ESMF_FieldBundleCreate, ESMF_MESHLOC_ELEMENT, ESMF_FieldBundleAdd + use ESMF , only : ESMF_POLEMETHOD_ALLAVG, ESMF_EXTRAPMETHOD_NEAREST_STOD, ESMF_REGRIDMETHOD_BILINEAR, ESMF_REGRIDMETHOD_NEAREST_STOD + use ESMF , only : ESMF_ClockGet, operator(-), operator(==), ESMF_CALKIND_NOLEAP + use ESMF , only : ESMF_FieldReGridStore, ESMF_FieldRedistStore, ESMF_UNMAPPEDACTION_IGNORE + use ESMF , only : ESMF_TERMORDER_SRCSEQ, ESMF_FieldRegrid, ESMF_FieldFill + use ESMF , only : ESMF_REGION_TOTAL, ESMF_FieldGet, ESMF_TraceRegionExit, ESMF_TraceRegionEnter use shr_kind_mod , only : r8=>shr_kind_r8, r4=>shr_kind_r4, i2=>shr_kind_I2 use shr_kind_mod , only : cs=>shr_kind_cs, cl=>shr_kind_cl, cxx=>shr_kind_cxx use shr_sys_mod , only : shr_sys_abort @@ -403,7 +415,7 @@ subroutine shr_strdata_init(sdat, model_clock, rc) ! Determine field names for stream fields with both stream file names and data model names nvars = sdat%stream(ns)%nvars - ! Allocate memory + ! Allocate memory allocate(sdat%pstrm(ns)%fldList_model(nvars)) call shr_stream_getModelFieldList(sdat%stream(ns), sdat%pstrm(ns)%fldlist_model) allocate(sdat%pstrm(ns)%fldlist_stream(nvars)) @@ -1297,7 +1309,7 @@ subroutine shr_strdata_readstrm(sdat, per_stream, stream, fldbun_data, & integer :: pio_iovartype real(r8), pointer :: nv_coords(:), nu_coords(:) real(r8), pointer :: data_u_dst(:), data_v_dst(:) - real(r8) :: lat, lon + real(r8) :: lat, lon real(r8) :: sinlat, sinlon real(r8) :: coslat, coslon real(r8) :: scale_factor, add_offset @@ -1679,7 +1691,7 @@ subroutine shr_strdata_readstrm(sdat, per_stream, stream, fldbun_data, & data_u_dst(i) = coslon * dataptr2d_dst(1,i) + sinlon * dataptr2d_dst(2,i) data_v_dst(i) = -sinlon * dataptr2d_dst(1,i) + coslon * dataptr2d_dst(2,i) enddo - + deallocate(dataptr) endif From c64e7a2430edfb6306c03bc8d34721e41d98a372 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Tue, 19 Jan 2021 10:09:38 -0700 Subject: [PATCH 139/153] add only clause to dshr_methods_mod --- streams/dshr_methods_mod.F90 | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/streams/dshr_methods_mod.F90 b/streams/dshr_methods_mod.F90 index aa68721af..bb079da4e 100644 --- a/streams/dshr_methods_mod.F90 +++ b/streams/dshr_methods_mod.F90 @@ -2,7 +2,16 @@ module dshr_methods_mod ! Share methods for data model functionality - use ESMF + use ESMF , only : ESMF_State, ESMF_Field, ESMF_StateGet, ESMF_FieldBundle + use ESMF , only : ESMF_LogWrite, ESMF_SUCCESS, ESMF_FAILURE + use ESMF , only : ESMF_StateRemove, ESMF_StateGet, ESMF_RouteHandle + use ESMF , only : ESMF_Region_Flag, ESMF_FieldStatus_Flag, ESMF_LOGMSG_INFO + use ESMF , only : ESMF_MAXSTR, ESMF_LOGMSG_ERROR, ESMF_LOGERR_PASSTHRU + use ESMF , only : ESMF_FieldBundleGet, ESMF_FieldBundleAdd, ESMF_FieldGet + use ESMF , only : ESMF_REGION_TOTAL, ESMF_END_ABORT, ESMF_ITEMORDER_ADDORDER + use ESMF , only : ESMF_LogFoundError, ESMF_FieldRegrid, ESMF_Finalize, ESMF_FIELDSTATUS_COMPLETE + use ESMF , only : ESMF_TERMORDER_SRCSEQ, operator(/=) + use ESMF , only : ESMF_TraceRegionEnter, ESMF_TraceRegionExit use shr_kind_mod , only : r8=>shr_kind_r8, cs=>shr_kind_cs, cl=>shr_kind_cl implicit none From 5374de6ce1ab1f48482486435d285816d110a07b Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Tue, 19 Jan 2021 10:22:23 -0700 Subject: [PATCH 140/153] add only clause --- datm/atm_comp_nuopc.F90 | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/datm/atm_comp_nuopc.F90 b/datm/atm_comp_nuopc.F90 index 0b0103807..9bbc0b133 100644 --- a/datm/atm_comp_nuopc.F90 +++ b/datm/atm_comp_nuopc.F90 @@ -4,7 +4,15 @@ module atm_comp_nuopc ! This is the NUOPC cap for DATM !---------------------------------------------------------------------------- - use ESMF + use ESMF , only : ESMF_Mesh, ESMF_GridComp, ESMF_SUCCESS, ESMF_LogWrite + use ESMF , only : ESMF_GridCompSetEntryPoint, ESMF_METHOD_INITIALIZE + use ESMF , only : ESMF_MethodRemove, ESMF_State, ESMF_Clock, ESMF_TimeInterval + use ESMF , only : ESMF_State, ESMF_Field, ESMF_LOGMSG_INFO, ESMF_ClockGet + use ESMF , only : ESMF_Time, ESMF_Alarm, ESMF_TimeGet, ESMF_TimeInterval + use ESMF , only : operator(+), ESMF_TimeIntervalGet, ESMF_ClockGetAlarm + use ESMF , only : ESMF_AlarmIsRinging, ESMF_AlarmRingerOff, ESMF_StateGet + use ESMF , only : ESMF_FieldGet, ESMF_MAXSTR + use ESMF , only : ESMF_TraceRegionEnter, ESMF_TraceRegionExit use NUOPC , only : NUOPC_CompDerive, NUOPC_CompSetEntryPoint, NUOPC_CompSpecialize use NUOPC , only : NUOPC_CompAttributeGet, NUOPC_Advertise use NUOPC_Model , only : model_routine_SS => SetServices From 44b886440239ba897e6fba361c94726ae5fbba1b Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Tue, 19 Jan 2021 10:47:53 -0700 Subject: [PATCH 141/153] add more only clauses --- datm/datm_datamode_core2_mod.F90 | 20 ++++++++++++++++---- datm/datm_datamode_era5_mod.F90 | 8 ++++---- datm/datm_datamode_jra_mod.F90 | 8 ++++---- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/datm/datm_datamode_core2_mod.F90 b/datm/datm_datamode_core2_mod.F90 index aae90a23e..4bdfa58fd 100644 --- a/datm/datm_datamode_core2_mod.F90 +++ b/datm/datm_datamode_core2_mod.F90 @@ -1,6 +1,19 @@ module datm_datamode_core2_mod - use ESMF + use ESMF , only : ESMF_State, ESMF_Field, ESMF_FieldBundle + use ESMF , only : ESMF_DistGrid, ESMF_RouteHandle, ESMF_MeshCreate + use ESMF , only : ESMF_Mesh, ESMF_MeshGet, ESMF_MeshCreate + use ESMF , only : ESMF_SUCCESS, ESMF_LogWrite, ESMF_FILEFORMAT_ESMFMESH + use ESMF , only : ESMF_FieldBundleCreate, ESMF_FieldCreate, ESMF_MESHLOC_ELEMENT + use ESMF , only : ESMF_FieldBundleAdd, ESMF_LOGMSG_INFO, ESMF_TYPEKIND_R8 + use ESMF , only : ESMF_RouteHandleDestroy, ESMF_EXTRAPMETHOD_NEAREST_STOD + use ESMF , only : ESMF_POLEMETHOD_ALLAVG, ESMF_REGRIDMETHOD_BILINEAR + use ESMF , only : ESMF_DistGridGet, ESMF_FieldRegridStore, ESMF_FieldRedistStore + use pio , only : Var_Desc_t, file_desc_t, io_desc_t, pio_read_darray, pio_freedecomp + use pio , only : pio_openfile, PIO_NOWRITE, pio_seterrorhandling, PIO_BCAST_ERROR + use pio , only : pio_initdecomp, pio_inq_dimlen, pio_inq_varid + use pio , only : pio_inq_varndims, pio_inq_vardimid, pio_double + use pio , only : pio_closefile use NUOPC , only : NUOPC_Advertise use shr_kind_mod , only : r8=>shr_kind_r8, i8=>shr_kind_i8, cl=>shr_kind_cl, cs=>shr_kind_cs use shr_sys_mod , only : shr_sys_abort @@ -11,7 +24,6 @@ module datm_datamode_core2_mod use dshr_mod , only : dshr_restart_read, dshr_restart_write use dshr_strdata_mod , only : shr_strdata_type use dshr_fldlist_mod , only : fldlist_type, dshr_fldlist_add - use pio implicit none private ! except @@ -369,7 +381,7 @@ end subroutine datm_datamode_core2_advance !=============================================================================== subroutine datm_datamode_core2_restart_write(case_name, inst_suffix, ymd, tod, & logunit, my_task, sdat) - + ! input/output variables character(len=*) , intent(in) :: case_name character(len=*) , intent(in) :: inst_suffix @@ -405,7 +417,7 @@ end subroutine datm_datamode_core2_restart_read subroutine datm_get_adjustment_factors(sdat, fileName_mesh, fileName_data, windF, winddF, qsatF, rc) ! input/output variables - type(shr_strdata_type) , intent(in) :: sdat + type(shr_strdata_type) , intent(in) :: sdat character(*) , intent(in) :: fileName_mesh ! file name string character(*) , intent(in) :: fileName_data ! file name string real(R8) , pointer :: windF(:) ! wind adjustment factor diff --git a/datm/datm_datamode_era5_mod.F90 b/datm/datm_datamode_era5_mod.F90 index 30f4a49ff..71e60a016 100644 --- a/datm/datm_datamode_era5_mod.F90 +++ b/datm/datm_datamode_era5_mod.F90 @@ -1,6 +1,6 @@ module datm_datamode_era5_mod - use ESMF + use ESMF , only : ESMF_State, ESMF_SUCCESS, ESMF_LogWrite, ESMF_LOGMSG_INFO use NUOPC , only : NUOPC_Advertise use shr_kind_mod , only : r8=>shr_kind_r8, i8=>shr_kind_i8, cl=>shr_kind_cl, cs=>shr_kind_cs use shr_sys_mod , only : shr_sys_abort @@ -60,7 +60,7 @@ module datm_datamode_era5_mod real(r8) , parameter :: tKFrz = SHR_CONST_TKFRZ real(r8) , parameter :: rdair = SHR_CONST_RDAIR ! dry air gas constant ~ J/K/kg real(r8) , parameter :: rhofw = SHR_CONST_RHOFW ! density of fresh water ~ kg/m^3 - + character(*), parameter :: nullstr = 'undefined' character(*), parameter :: rpfile = 'rpointer.atm' character(*), parameter :: u_FILE_u = & @@ -248,7 +248,7 @@ subroutine datm_datamode_era5_advance(exportstate, masterproc, logunit, mpicom, !--- calculate wind speed --- if (associated(Sa_wspd)) then - Sa_wspd(n) = sqrt(Sa_u(n)*Sa_u(n)+Sa_v(n)*Sa_v(n)) + Sa_wspd(n) = sqrt(Sa_u(n)*Sa_u(n)+Sa_v(n)*Sa_v(n)) end if !--- temperature --- @@ -316,7 +316,7 @@ end subroutine datm_datamode_era5_advance !=============================================================================== subroutine datm_datamode_era5_restart_write(case_name, inst_suffix, ymd, tod, & logunit, my_task, sdat) - + ! input/output variables character(len=*) , intent(in) :: case_name character(len=*) , intent(in) :: inst_suffix diff --git a/datm/datm_datamode_jra_mod.F90 b/datm/datm_datamode_jra_mod.F90 index 653e9251b..7f7815d04 100644 --- a/datm/datm_datamode_jra_mod.F90 +++ b/datm/datm_datamode_jra_mod.F90 @@ -1,6 +1,7 @@ module datm_datamode_jra_mod - use ESMF + use ESMF , only : ESMF_State, ESMF_SUCCESS, ESMF_LogWrite, ESMF_LOGMSG_INFO + use ESMF , only : ESMF_MeshGet use NUOPC , only : NUOPC_Advertise use shr_kind_mod , only : r8=>shr_kind_r8, i8=>shr_kind_i8, cl=>shr_kind_cl, cs=>shr_kind_cs use shr_sys_mod , only : shr_sys_abort @@ -11,7 +12,6 @@ module datm_datamode_jra_mod use dshr_mod , only : dshr_restart_read, dshr_restart_write use dshr_strdata_mod , only : shr_strdata_type use dshr_fldlist_mod , only : fldlist_type, dshr_fldlist_add - use pio implicit none private ! except @@ -223,7 +223,7 @@ subroutine datm_datamode_jra_advance(exportstate, target_ymd, target_tod, model_ Sa_pbot(n) = Sa_pslv(n) Sa_ptem(n) = Sa_tbot(n) - ! density computation for JRA55 forcing + ! density computation for JRA55 forcing Sa_dens(n) = Sa_pbot(n)/(rdair*Sa_tbot(n)*(1 + 0.608*Sa_shum(n))) ! precipitation data @@ -253,7 +253,7 @@ end subroutine datm_datamode_jra_advance !=============================================================================== subroutine datm_datamode_jra_restart_write(case_name, inst_suffix, ymd, tod, & logunit, my_task, sdat) - + ! input/output variables character(len=*) , intent(in) :: case_name character(len=*) , intent(in) :: inst_suffix From 0ef2a4441515d15c8fe0b256fc10cc7f568f0711 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Tue, 19 Jan 2021 10:51:53 -0700 Subject: [PATCH 142/153] add more only clauses --- datm/datm_datamode_clmncep_mod.F90 | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/datm/datm_datamode_clmncep_mod.F90 b/datm/datm_datamode_clmncep_mod.F90 index f4664b341..3dd53e0e9 100644 --- a/datm/datm_datamode_clmncep_mod.F90 +++ b/datm/datm_datamode_clmncep_mod.F90 @@ -1,6 +1,7 @@ module datm_datamode_clmncep_mod - use ESMF + use ESMF , only : ESMF_SUCCESS, ESMF_LogWrite, ESMF_State, ESMF_StateItem_Flag + use ESMF , only : ESMF_STATEITEM_NOTFOUND, ESMF_LOGMSG_INFO, ESMF_StateGet, operator(/=) use NUOPC , only : NUOPC_Advertise use shr_kind_mod , only : r8=>shr_kind_r8, i8=>shr_kind_i8, cl=>shr_kind_cl, cs=>shr_kind_cs use shr_sys_mod , only : shr_sys_abort @@ -100,7 +101,7 @@ module datm_datamode_clmncep_mod real(r8) , parameter :: stebol = SHR_CONST_STEBOL ! Stefan-Boltzmann constant ~ W/m^2/K^4 real(r8) , parameter :: rdair = SHR_CONST_RDAIR ! dry air gas constant ~ J/K/kg - + character(*), parameter :: nullstr = 'null' character(*), parameter :: rpfile = 'rpointer.atm' character(*), parameter :: u_FILE_u = & @@ -302,13 +303,13 @@ subroutine datm_datamode_clmncep_init_pointers(importState, exportState, sdat, r if (ChkErr(rc,__LINE__,u_FILE_u)) return if (itemflag /= ESMF_STATEITEM_NOTFOUND) then atm_prognostic = .true. - call dshr_state_getfldptr(importState, 'Sx_anidr', fldptr1=Sx_anidr, rc=rc) + call dshr_state_getfldptr(importState, 'Sx_anidr', fldptr1=Sx_anidr, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call dshr_state_getfldptr(importState, 'Sx_anidf', fldptr1=Sx_anidf, rc=rc) + call dshr_state_getfldptr(importState, 'Sx_anidf', fldptr1=Sx_anidf, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call dshr_state_getfldptr(importState, 'Sx_avsdr', fldptr1=Sx_avsdr, rc=rc) + call dshr_state_getfldptr(importState, 'Sx_avsdr', fldptr1=Sx_avsdr, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return - call dshr_state_getfldptr(importState, 'Sx_avsdf', fldptr1=Sx_avsdf, rc=rc) + call dshr_state_getfldptr(importState, 'Sx_avsdf', fldptr1=Sx_avsdf, rc=rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return end if @@ -490,7 +491,7 @@ subroutine datm_datamode_clmncep_advance(masterproc, logunit, mpicom, rc) ! bias correction / anomaly forcing ( start block ) ! modify atmospheric input fields if streams exist !---------------------------------------------------------- - + ! bias correct precipitation relative to observed ! (via bias_correct nameslist option) if (associated(strm_precsf)) then @@ -541,7 +542,7 @@ end subroutine datm_datamode_clmncep_advance !=============================================================================== subroutine datm_datamode_clmncep_restart_write(case_name, inst_suffix, ymd, tod, & logunit, my_task, sdat) - + ! input/output variables character(len=*) , intent(in) :: case_name character(len=*) , intent(in) :: inst_suffix From 736766b6134a5c4fbe8244addcf5094b6fc20196 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Tue, 19 Jan 2021 14:09:28 -0700 Subject: [PATCH 143/153] add more only clauses --- docn/docn_datamode_aquaplanet_mod.F90 | 4 ++-- docn/docn_datamode_copyall_mod.F90 | 4 ++-- docn/docn_datamode_iaf_mod.F90 | 4 ++-- docn/docn_datamode_som_mod.F90 | 14 ++++++++------ docn/ocn_comp_nuopc.F90 | 8 +++++++- 5 files changed, 21 insertions(+), 13 deletions(-) diff --git a/docn/docn_datamode_aquaplanet_mod.F90 b/docn/docn_datamode_aquaplanet_mod.F90 index e687d8d85..e851e6d31 100644 --- a/docn/docn_datamode_aquaplanet_mod.F90 +++ b/docn/docn_datamode_aquaplanet_mod.F90 @@ -1,6 +1,6 @@ module docn_datamode_aquaplanet_mod - use ESMF + use ESMF , only : ESMF_SUCCESS, ESMF_State, ESMF_Mesh, ESMF_MeshGet, ESMF_LogWrite, ESMF_LOGMSG_INFO use NUOPC , only : NUOPC_Advertise use shr_kind_mod , only : r8=>shr_kind_r8, i8=>shr_kind_i8, cl=>shr_kind_cl, cs=>shr_kind_cs use shr_const_mod , only : shr_const_TkFrz, shr_const_pi @@ -22,7 +22,7 @@ module docn_datamode_aquaplanet_mod real(r8), pointer :: So_v(:) => null() ! model mesh lats and lons in radians - real(r8), pointer :: rlon(:), rlat(:) + real(r8), pointer :: rlon(:), rlat(:) ! parameters real(r8) , parameter :: tkfrz = shr_const_tkfrz ! freezing point, fresh water (kelvin) diff --git a/docn/docn_datamode_copyall_mod.F90 b/docn/docn_datamode_copyall_mod.F90 index 08fb4600f..a0d6be224 100644 --- a/docn/docn_datamode_copyall_mod.F90 +++ b/docn/docn_datamode_copyall_mod.F90 @@ -1,6 +1,6 @@ module docn_datamode_copyall_mod - use ESMF + use ESMF , only : ESMF_State, ESMF_LOGMSG_INFO, ESMF_LogWrite, ESMF_SUCCESS use NUOPC , only : NUOPC_Advertise use shr_kind_mod , only : r8=>shr_kind_r8, i8=>shr_kind_i8, cl=>shr_kind_cl, cs=>shr_kind_cs use shr_const_mod , only : shr_const_TkFrz, shr_const_pi, shr_const_ocn_ref_sal @@ -125,7 +125,7 @@ end subroutine docn_datamode_copyall_advance !=============================================================================== subroutine docn_datamode_copyall_restart_write(case_name, inst_suffix, ymd, tod, & logunit, my_task, sdat) - + ! input/output variables character(len=*) , intent(in) :: case_name character(len=*) , intent(in) :: inst_suffix diff --git a/docn/docn_datamode_iaf_mod.F90 b/docn/docn_datamode_iaf_mod.F90 index 6edc5e087..032467f35 100644 --- a/docn/docn_datamode_iaf_mod.F90 +++ b/docn/docn_datamode_iaf_mod.F90 @@ -1,6 +1,6 @@ module docn_datamode_iaf_mod - use ESMF + use ESMF , only : ESMF_SUCCESS, ESMF_LOGMSG_INFO, ESMF_LogWrite, ESMF_State use NUOPC , only : NUOPC_Advertise use shr_kind_mod , only : r8=>shr_kind_r8, i8=>shr_kind_i8, cl=>shr_kind_cl, cs=>shr_kind_cs use shr_sys_mod , only : shr_sys_abort @@ -179,7 +179,7 @@ end subroutine docn_datamode_iaf_advance !=============================================================================== subroutine docn_datamode_iaf_restart_write(case_name, inst_suffix, ymd, tod, & logunit, my_task, sdat) - + ! write restart file ! input/output variables diff --git a/docn/docn_datamode_som_mod.F90 b/docn/docn_datamode_som_mod.F90 index c73a4434d..790990fa6 100644 --- a/docn/docn_datamode_som_mod.F90 +++ b/docn/docn_datamode_som_mod.F90 @@ -1,6 +1,9 @@ module docn_datamode_som_mod - use ESMF + use ESMF , only : ESMF_SUCCESS, ESMF_State, ESMF_Clock, ESMF_StateGet, ESMF_StateItem_Flag + use ESMF , only : ESMF_TimeInterval, ESMF_ClockGet, ESMF_TimeIntervalGet + use ESMF , only : ESMF_LOGMSG_INFO, ESMF_STATEITEM_NOTFOUND, operator(/=) + use ESMF , only : ESMF_LogWrite use NUOPC , only : NUOPC_Advertise use shr_kind_mod , only : r8=>shr_kind_r8, i8=>shr_kind_i8, cl=>shr_kind_cl, cs=>shr_kind_cs use shr_sys_mod , only : shr_sys_abort @@ -14,7 +17,6 @@ module docn_datamode_som_mod use dshr_strdata_mod , only : shr_strdata_type use dshr_mod , only : dshr_restart_read, dshr_restart_write use dshr_fldlist_mod , only : fldlist_type, dshr_fldlist_add - use pio implicit none private ! except @@ -193,7 +195,7 @@ subroutine docn_datamode_som_init_pointers(importState, exportState, sdat, ocn_f call dshr_state_getfldptr(exportState, 'Fioo_q' , fldptr1=Fioo_q , rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return - ! For So_fswpen is only needed for diurnal cycle calculation of atm/ocn fluxes + ! For So_fswpen is only needed for diurnal cycle calculation of atm/ocn fluxes ! Currently this is not implemented in cmeps call ESMF_StateGet(exportState, 'So_fswpen', itemFlag, rc=rc) if (chkerr(rc,__LINE__,u_FILE_u)) return @@ -221,7 +223,7 @@ subroutine docn_datamode_som_advance(importState, exportState, clock, restart_re ! input/output variables type(ESMF_State) , intent(inout) :: importState type(ESMF_State) , intent(inout) :: exportState - type(ESMF_Clock) , intent(in) :: clock + type(ESMF_Clock) , intent(in) :: clock logical , intent(in) :: restart_read character(len=*) , intent(in) :: datamode integer , intent(out) :: rc @@ -278,7 +280,7 @@ subroutine docn_datamode_som_advance(importState, exportState, clock, restart_re ! compute ice formed or melt potential Fioo_q(n) = (tfreeze(n) - So_t(n))*(cpsw*rhosw*strm_h(n))/dt ! ice formed q>0 - + ! reset temp if (reset_temp) then So_t(n) = max(tfreeze(n),So_t(n)) @@ -299,7 +301,7 @@ end subroutine docn_datamode_som_advance !=============================================================================== subroutine docn_datamode_som_restart_write(case_name, inst_suffix, ymd, tod, & logunit, my_task, sdat) - + ! write restart file ! input/output variables diff --git a/docn/ocn_comp_nuopc.F90 b/docn/ocn_comp_nuopc.F90 index 60ba6ba1a..6a73b1043 100644 --- a/docn/ocn_comp_nuopc.F90 +++ b/docn/ocn_comp_nuopc.F90 @@ -4,7 +4,13 @@ module ocn_comp_nuopc ! This is the NUOPC cap for DOCN !---------------------------------------------------------------------------- - use ESMF + use ESMF , only : ESMF_Mesh, ESMF_GridComp, ESMF_State, ESMF_Clock, ESMF_Time + use ESMF , only : ESMF_SUCCESS, ESMF_LogWrite, ESMF_LOGMSG_INFO, ESMF_METHOD_INITIALIZE + use ESMF , only : ESMF_TraceRegionEnter, ESMF_TraceRegionExit, ESMF_ClockGet + use ESMF , only : ESMF_TimeGet, ESMF_TimeInterval, ESMF_Field, ESMF_MAXSTR + use ESMF , only : ESMF_Alarm, ESMF_MethodRemove, ESMF_MethodAdd + use ESMF , only : ESMF_GridCompSetEntryPoint, ESMF_ClockGetAlarm, ESMF_AlarmIsRinging + use ESMF , only : ESMF_StateGet, operator(+), ESMF_AlarmRingerOff, ESMF_LogWrite use NUOPC , only : NUOPC_CompDerive, NUOPC_CompSetEntryPoint, NUOPC_CompSpecialize use NUOPC , only : NUOPC_Advertise, NUOPC_CompAttributeGet use NUOPC_Model , only : model_routine_SS => SetServices From 63f16540bf5c3cb6b3fb2bd8a47b972c3a6d640d Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Tue, 19 Jan 2021 14:53:35 -0700 Subject: [PATCH 144/153] add more only clauses --- dice/dice_datamode_ssmi_mod.F90 | 5 +++-- dice/dice_flux_atmice_mod.F90 | 19 ++++++------------- dice/ice_comp_nuopc.F90 | 9 ++++++++- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/dice/dice_datamode_ssmi_mod.F90 b/dice/dice_datamode_ssmi_mod.F90 index 090c4f10c..f48244bb7 100644 --- a/dice/dice_datamode_ssmi_mod.F90 +++ b/dice/dice_datamode_ssmi_mod.F90 @@ -1,6 +1,8 @@ module dice_datamode_ssmi_mod - use ESMF + use ESMF , only : ESMF_State, ESMF_LogWrite, ESMF_Array, ESMF_MeshGet + use ESMF , only : ESMF_SUCCESS, ESMF_LOGMSG_INFO, ESMF_DistGrid + use ESMF , only : ESMF_ArrayCreate, ESMF_ArrayDestroy use NUOPC , only : NUOPC_Advertise use shr_kind_mod , only : r8=>shr_kind_r8, i8=>shr_kind_i8, cl=>shr_kind_cl, cs=>shr_kind_cs use shr_sys_mod , only : shr_sys_abort @@ -12,7 +14,6 @@ module dice_datamode_ssmi_mod use dshr_mod , only : dshr_restart_read, dshr_restart_write use dice_flux_atmice_mod , only : dice_flux_atmice use dshr_fldlist_mod , only : fldlist_type, dshr_fldlist_add - use pio implicit none private ! except diff --git a/dice/dice_flux_atmice_mod.F90 b/dice/dice_flux_atmice_mod.F90 index e4d17caec..4d660765b 100644 --- a/dice/dice_flux_atmice_mod.F90 +++ b/dice/dice_flux_atmice_mod.F90 @@ -1,20 +1,14 @@ module dice_flux_atmice_mod use shr_kind_mod, only : r8=>shr_kind_r8, cxx=>shr_kind_cxx, cl=>shr_kind_cl, cs=>shr_kind_cs - use shr_const_mod ! shared constants - use shr_sys_mod ! shared system routines - + ! shared constants + use shr_const_mod, only : loc_zvir => shr_const_zvir, loc_cpdair => shr_const_cpdair + use shr_const_mod, only : loc_cpvir => shr_const_cpvir, loc_karman => shr_const_karman + use shr_const_mod, only : loc_g => shr_const_g, loc_latvap => shr_const_latvap + use shr_const_mod, only : loc_latice => shr_const_latice, loc_stebol => shr_const_stebol + use shr_const_mod, only : spval => shr_const_spval implicit none - real(R8) :: loc_zvir = shr_const_zvir - real(R8) :: loc_cpdair = shr_const_cpdair - real(R8) :: loc_cpvir = shr_const_cpvir - real(R8) :: loc_karman = shr_const_karman - real(R8) :: loc_g = shr_const_g - real(R8) :: loc_latvap = shr_const_latvap - real(R8) :: loc_latice = shr_const_latice - real(R8) :: loc_stebol = shr_const_stebol - integer,parameter :: dbug = 0 ! internal debug level !=============================================================================== @@ -68,7 +62,6 @@ subroutine dice_flux_atmice( & real(R8),parameter :: umin = 1.0_R8 ! minimum wind speed (m/s) real(R8),parameter :: zref = 10.0_R8 ! ref height ~ m real(R8),parameter :: ztref = 2.0_R8 ! ref height for air T ~ m - real(R8),parameter :: spval = shr_const_spval ! special value real(R8),parameter :: zzsice = 0.0005_R8 ! ice surface roughness !--- local variables -------------------------------- diff --git a/dice/ice_comp_nuopc.F90 b/dice/ice_comp_nuopc.F90 index 05ede8161..de243e597 100644 --- a/dice/ice_comp_nuopc.F90 +++ b/dice/ice_comp_nuopc.F90 @@ -4,7 +4,14 @@ module ice_comp_nuopc ! This is the NUOPC cap for DICE !---------------------------------------------------------------------------- - use ESMF + use ESMF , only : ESMF_Mesh, ESMF_GridComp, ESMF_State, ESMF_Clock + use ESMF , only : ESMF_SUCCESS, ESMF_Time, ESMF_LogWrite, ESMF_LOGMSG_INFO + use ESMF , only : ESMF_TraceRegionEnter, ESMF_TraceRegionExit + use ESMF , only : ESMF_Alarm, ESMF_TimeInterval, ESMF_TimeIntervalGet + use ESMF , only : ESMF_AlarmIsRinging, ESMF_METHOD_INITIALIZE + use ESMF , only : ESMF_ClockGet, ESMF_TimeGet, ESMF_MethodRemove, ESMF_MethodAdd + use ESMF , only : ESMF_GridCompSetEntryPoint, operator(+), ESMF_AlarmRingerOff + use ESMF , only : ESMF_ClockGetAlarm use NUOPC , only : NUOPC_CompDerive, NUOPC_CompSetEntryPoint, NUOPC_CompSpecialize use NUOPC , only : NUOPC_CompAttributeGet, NUOPC_Advertise use NUOPC_Model , only : model_routine_SS => SetServices From 64337ef3790fe3899edf4072682273e8621b395c Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Tue, 19 Jan 2021 15:02:05 -0700 Subject: [PATCH 145/153] add more only clauses --- drof/rof_comp_nuopc.F90 | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drof/rof_comp_nuopc.F90 b/drof/rof_comp_nuopc.F90 index 529409cc8..aef47ee01 100644 --- a/drof/rof_comp_nuopc.F90 +++ b/drof/rof_comp_nuopc.F90 @@ -4,7 +4,13 @@ module rof_comp_nuopc ! This is the NUOPC cap for DROF !---------------------------------------------------------------------------- - use ESMF + use ESMF , only : ESMF_Mesh, ESMF_GridComp, ESMF_Time, ESMF_TimeInterval + use ESMF , only : ESMF_State, ESMF_Clock, ESMF_SUCCESS, ESMF_LOGMSG_INFO + use ESMF , only : ESMF_TraceRegionEnter, ESMF_TraceRegionExit + use ESMF , only : ESMF_Alarm, ESMF_METHOD_INITIALIZE, ESMF_MethodAdd, ESMF_MethodRemove + use ESMF , only : ESMF_TimeGet, ESMF_ClockGet, ESMF_GridCompSetEntryPoint + use ESMF , only : ESMF_ClockGetAlarm, ESMF_AlarmIsRinging, ESMF_AlarmRingerOff + use ESMF , only : operator(+), ESMF_LogWrite use NUOPC , only : NUOPC_CompDerive, NUOPC_CompSetEntryPoint, NUOPC_CompSpecialize use NUOPC , only : NUOPC_CompAttributeGet, NUOPC_Advertise use NUOPC_Model , only : model_routine_SS => SetServices From 4dc756e974685331569156068e9c6928a0608702 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Tue, 19 Jan 2021 15:13:05 -0700 Subject: [PATCH 146/153] add more only clauses --- dlnd/lnd_comp_nuopc.F90 | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/dlnd/lnd_comp_nuopc.F90 b/dlnd/lnd_comp_nuopc.F90 index ad9455ff3..9bef74f5b 100644 --- a/dlnd/lnd_comp_nuopc.F90 +++ b/dlnd/lnd_comp_nuopc.F90 @@ -4,7 +4,13 @@ module lnd_comp_nuopc ! This is the NUOPC cap for DLND !---------------------------------------------------------------------------- - use ESMF + use ESMF , only : ESMF_Mesh, ESMF_GridComp, ESMF_SUCCESS, ESMF_LOGMSG_INFO + use ESMF , only : ESMF_LogWrite, ESMF_TraceRegionExit, ESMF_TraceRegionEnter + use ESMF , only : ESMF_Clock, ESMF_Alarm, ESMF_State, ESMF_ClockGet, ESMF_timeGet + use ESMF , only : ESMF_Time, ESMF_TimeInterval, ESMF_METHOD_INITIALIZE + use ESMF , only : ESMF_MethodAdd, ESMF_MethodRemove + use ESMF , only : ESMF_ClockGetAlarm, ESMF_AlarmIsRinging, ESMF_AlarmRingerOff + use ESMF , only : ESMF_GridCompSetEntryPoint, operator(+) use NUOPC , only : NUOPC_CompDerive, NUOPC_CompSetEntryPoint, NUOPC_CompSpecialize use NUOPC , only : NUOPC_CompAttributeGet, NUOPC_Advertise use NUOPC_Model , only : model_routine_SS => SetServices From ca70972e16b5be520c9996f91e381442c82d5421 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Tue, 19 Jan 2021 15:22:18 -0700 Subject: [PATCH 147/153] add more only clauses --- dwav/wav_comp_nuopc.F90 | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/dwav/wav_comp_nuopc.F90 b/dwav/wav_comp_nuopc.F90 index 0fe275baa..a6aa72243 100644 --- a/dwav/wav_comp_nuopc.F90 +++ b/dwav/wav_comp_nuopc.F90 @@ -4,7 +4,13 @@ module wav_comp_nuopc ! This is the NUOPC cap for DWAV !---------------------------------------------------------------------------- - use ESMF + use ESMF , only : ESMF_SUCCESS, ESMF_TraceRegionExit, ESMF_TraceRegionEnter + use ESMF , only : ESMF_State, ESMF_Clock, ESMF_Alarm, ESMF_LogWrite, ESMF_Time + use ESMF , only : ESMF_ClockGetAlarm, ESMF_LOGMSG_INFO + use ESMF , only : ESMF_Mesh, ESMF_GridComp, ESMF_TimeInterval, ESMF_GridCompSetEntryPoint + use ESMF , only : ESMF_METHOD_INITIALIZE, ESMF_MethodAdd, ESMF_MethodRemove + use ESMF , only : ESMF_ClockGet, ESMF_TimeGet, operator(+), ESMF_AlarmRingerOff + use ESMF , only : ESMF_AlarmIsRinging use NUOPC , only : NUOPC_CompDerive, NUOPC_CompSetEntryPoint, NUOPC_CompSpecialize use NUOPC , only : NUOPC_CompAttributeGet, NUOPC_Advertise use NUOPC_Model , only : model_routine_SS => SetServices From 05458c0b893d44256547c46a6970e504bd6b02b1 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Tue, 19 Jan 2021 15:49:42 -0700 Subject: [PATCH 148/153] more only clauses --- datm/datm_datamode_cplhist_mod.F90 | 5 +++-- streams/dshr_strdata_mod.F90 | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/datm/datm_datamode_cplhist_mod.F90 b/datm/datm_datamode_cplhist_mod.F90 index ac9b24488..98c1d5cf0 100644 --- a/datm/datm_datamode_cplhist_mod.F90 +++ b/datm/datm_datamode_cplhist_mod.F90 @@ -1,6 +1,7 @@ module datm_datamode_cplhist_mod - use ESMF + use ESMF , only : ESMF_SUCCESS, ESMF_LOGMSG_INFO, ESMF_LogWrite, ESMF_State + use ESMF , only : ESMF_StateItem_Flag use NUOPC , only : NUOPC_Advertise use shr_kind_mod , only : r8=>shr_kind_r8, i8=>shr_kind_i8, cl=>shr_kind_cl, cs=>shr_kind_cs use shr_sys_mod , only : shr_sys_abort @@ -198,7 +199,7 @@ end subroutine datm_datamode_cplhist_advance !=============================================================================== subroutine datm_datamode_cplhist_restart_write(case_name, inst_suffix, ymd, tod, & logunit, my_task, sdat) - + ! input/output variables character(len=*) , intent(in) :: case_name character(len=*) , intent(in) :: inst_suffix diff --git a/streams/dshr_strdata_mod.F90 b/streams/dshr_strdata_mod.F90 index 890461efa..40f58c40c 100644 --- a/streams/dshr_strdata_mod.F90 +++ b/streams/dshr_strdata_mod.F90 @@ -17,6 +17,7 @@ module dshr_strdata_mod use ESMF , only : ESMF_FieldReGridStore, ESMF_FieldRedistStore, ESMF_UNMAPPEDACTION_IGNORE use ESMF , only : ESMF_TERMORDER_SRCSEQ, ESMF_FieldRegrid, ESMF_FieldFill use ESMF , only : ESMF_REGION_TOTAL, ESMF_FieldGet, ESMF_TraceRegionExit, ESMF_TraceRegionEnter + use ESMF , only : ESMF_LOGMSG_INFO use shr_kind_mod , only : r8=>shr_kind_r8, r4=>shr_kind_r4, i2=>shr_kind_I2 use shr_kind_mod , only : cs=>shr_kind_cs, cl=>shr_kind_cl, cxx=>shr_kind_cxx use shr_sys_mod , only : shr_sys_abort From bc84182f5f102f96d11bca32254c25dcfc914cd9 Mon Sep 17 00:00:00 2001 From: Jim Edwards Date: Tue, 19 Jan 2021 15:50:48 -0700 Subject: [PATCH 149/153] more only clauses --- streams/dshr_strdata_mod.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/streams/dshr_strdata_mod.F90 b/streams/dshr_strdata_mod.F90 index 40f58c40c..37de93636 100644 --- a/streams/dshr_strdata_mod.F90 +++ b/streams/dshr_strdata_mod.F90 @@ -17,7 +17,7 @@ module dshr_strdata_mod use ESMF , only : ESMF_FieldReGridStore, ESMF_FieldRedistStore, ESMF_UNMAPPEDACTION_IGNORE use ESMF , only : ESMF_TERMORDER_SRCSEQ, ESMF_FieldRegrid, ESMF_FieldFill use ESMF , only : ESMF_REGION_TOTAL, ESMF_FieldGet, ESMF_TraceRegionExit, ESMF_TraceRegionEnter - use ESMF , only : ESMF_LOGMSG_INFO + use ESMF , only : ESMF_LOGMSG_INFO, ESMF_LogWrite use shr_kind_mod , only : r8=>shr_kind_r8, r4=>shr_kind_r4, i2=>shr_kind_I2 use shr_kind_mod , only : cs=>shr_kind_cs, cl=>shr_kind_cl, cxx=>shr_kind_cxx use shr_sys_mod , only : shr_sys_abort From 1d8b5ce0a321cd40e95bfbe276e4d3b533b59a9f Mon Sep 17 00:00:00 2001 From: Ufuk Turuncoglu Date: Tue, 19 Jan 2021 22:24:10 -0600 Subject: [PATCH 150/153] fix make build under CESM --- CMakeLists.txt | 9 +++++++-- dice/CMakeLists.txt | 12 ++++++------ dlnd/CMakeLists.txt | 12 ++++++------ drof/CMakeLists.txt | 12 ++++++------ dwav/CMakeLists.txt | 12 ++++++------ share/CMakeLists.txt | 2 ++ 6 files changed, 33 insertions(+), 26 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d4384b426..ecda331a6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -81,7 +81,10 @@ target_include_directories(${COMP} PUBLIC $) endforeach(COMP) -foreach(COMP datm docn streams dshr cdeps_share FoX_dom FoX_wxml FoX_sax FoX_common FoX_utils FoX_fsys) +foreach(COMP datm dice dlnd docn drof dwav streams dshr cdeps_share FoX_dom FoX_wxml FoX_sax FoX_common FoX_utils FoX_fsys) + if(NOT BLD_STANDALONE AND ${COMP} STREQUAL "cdeps_share") + continue() + endif() install(TARGETS ${COMP} EXPORT ${COMP} LIBRARY DESTINATION lib @@ -90,4 +93,6 @@ foreach(COMP datm docn streams dshr cdeps_share FoX_dom FoX_wxml FoX_sax FoX_com DESTINATION lib/cmake) endforeach(COMP) -install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mod DESTINATION ${CMAKE_INSTALL_PREFIX}/CDEPS) +if (NOT DEFINED ENV{DESTDIR}) + install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mod DESTINATION ${CMAKE_INSTALL_PREFIX}/CDEPS) +endif() diff --git a/dice/CMakeLists.txt b/dice/CMakeLists.txt index eb446e735..bd24a640b 100644 --- a/dice/CMakeLists.txt +++ b/dice/CMakeLists.txt @@ -16,9 +16,9 @@ message("DICE srcfiles are ${SRCFILES}") add_library(dice ${SRCFILES}) add_dependencies(dice dshr streams) -target_include_directories (dice PUBLIC ${ESMF_F90COMPILEPATHS}) -target_include_directories (dice PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/dshr") -target_include_directories (dice PUBLIC "${CMAKE_SOURCE_DIR}") -target_include_directories (dice PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/share") -target_include_directories (dice PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/streams") -target_include_directories (dice PUBLIC "${PIO_Fortran_INCLUDE_DIR}") +target_include_directories (dice PRIVATE ${ESMF_F90COMPILEPATHS}) +target_include_directories (dice PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/dshr") +target_include_directories (dice PRIVATE "${CMAKE_SOURCE_DIR}") +target_include_directories (dice PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/share") +target_include_directories (dice PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/streams") +target_include_directories (dice PRIVATE "${PIO_Fortran_INCLUDE_DIR}") diff --git a/dlnd/CMakeLists.txt b/dlnd/CMakeLists.txt index 715b54814..92c20be7d 100644 --- a/dlnd/CMakeLists.txt +++ b/dlnd/CMakeLists.txt @@ -14,9 +14,9 @@ message("DLND srcfiles are ${SRCFILES}") add_library(dlnd ${SRCFILES}) add_dependencies(dlnd dshr streams) -target_include_directories (dlnd PUBLIC ${ESMF_F90COMPILEPATHS}) -target_include_directories (dlnd PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/dshr") -target_include_directories (dlnd PUBLIC "${CMAKE_SOURCE_DIR}") -target_include_directories (dlnd PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/share") -target_include_directories (dlnd PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/streams") -target_include_directories (dlnd PUBLIC "${PIO_Fortran_INCLUDE_DIR}") +target_include_directories (dlnd PRIVATE ${ESMF_F90COMPILEPATHS}) +target_include_directories (dlnd PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/dshr") +target_include_directories (dlnd PRIVATE "${CMAKE_SOURCE_DIR}") +target_include_directories (dlnd PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/share") +target_include_directories (dlnd PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/streams") +target_include_directories (dlnd PRIVATE "${PIO_Fortran_INCLUDE_DIR}") diff --git a/drof/CMakeLists.txt b/drof/CMakeLists.txt index ce772168c..50bbb20f1 100644 --- a/drof/CMakeLists.txt +++ b/drof/CMakeLists.txt @@ -14,9 +14,9 @@ message("DROF srcfiles are ${SRCFILES}") add_library(drof ${SRCFILES}) add_dependencies(drof dshr streams) -target_include_directories (drof PUBLIC ${ESMF_F90COMPILEPATHS}) -target_include_directories (drof PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/dshr") -target_include_directories (drof PUBLIC "${CMAKE_SOURCE_DIR}") -target_include_directories (drof PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/share") -target_include_directories (drof PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/streams") -target_include_directories (drof PUBLIC "${PIO_Fortran_INCLUDE_DIR}") +target_include_directories (drof PRIVATE ${ESMF_F90COMPILEPATHS}) +target_include_directories (drof PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/dshr") +target_include_directories (drof PRIVATE "${CMAKE_SOURCE_DIR}") +target_include_directories (drof PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/share") +target_include_directories (drof PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/streams") +target_include_directories (drof PRIVATE "${PIO_Fortran_INCLUDE_DIR}") diff --git a/dwav/CMakeLists.txt b/dwav/CMakeLists.txt index 27ebbd898..97fccbd52 100644 --- a/dwav/CMakeLists.txt +++ b/dwav/CMakeLists.txt @@ -14,9 +14,9 @@ message("DWAV srcfiles are ${SRCFILES}") add_library(dwav ${SRCFILES}) add_dependencies(dwav dshr streams) -target_include_directories (dwav PUBLIC ${ESMF_F90COMPILEPATHS}) -target_include_directories (dwav PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/dshr") -target_include_directories (dwav PUBLIC "${CMAKE_SOURCE_DIR}") -target_include_directories (dwav PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/share") -target_include_directories (dwav PUBLIC "${CMAKE_CURRENT_BINARY_DIR}/streams") -target_include_directories (dwav PUBLIC "${PIO_Fortran_INCLUDE_DIR}") +target_include_directories (dwav PRIVATE ${ESMF_F90COMPILEPATHS}) +target_include_directories (dwav PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/dshr") +target_include_directories (dwav PRIVATE "${CMAKE_SOURCE_DIR}") +target_include_directories (dwav PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/share") +target_include_directories (dwav PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/streams") +target_include_directories (dwav PRIVATE "${PIO_Fortran_INCLUDE_DIR}") diff --git a/share/CMakeLists.txt b/share/CMakeLists.txt index 542a8f67f..cc71a4217 100644 --- a/share/CMakeLists.txt +++ b/share/CMakeLists.txt @@ -22,6 +22,8 @@ add_library(cdeps_share ${GenF90_SRCS} target_include_directories (cdeps_share PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${ESMF_F90COMPILEPATHS} ${PIO_Fortran_INCLUDE_DIRS}) +install(TARGETS cdeps_share + LIBRARY DESTINATION lib) #===== genf90 ===== if (DEFINED GENF90_PATH) From c138337ee01d47ee00d9753a3292ea81339bb906 Mon Sep 17 00:00:00 2001 From: Ufuk Turuncoglu Date: Tue, 19 Jan 2021 23:08:01 -0600 Subject: [PATCH 151/153] more fix for cmake build under CESM --- CMakeLists.txt | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ecda331a6..6b5b95b46 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -72,19 +72,15 @@ target_include_directories(dshr PUBLIC $) target_include_directories(dshr PUBLIC $ $) + foreach(COMP datm dice dlnd docn drof dwav) -target_include_directories(${COMP} PUBLIC $ - $) -target_include_directories(${COMP} PUBLIC $ - $) -target_include_directories(${COMP} PUBLIC $ - $) -endforeach(COMP) + target_include_directories(${COMP} PUBLIC $ + $) + target_include_directories(${COMP} PUBLIC $ + $) + target_include_directories(${COMP} PUBLIC $ + $) -foreach(COMP datm dice dlnd docn drof dwav streams dshr cdeps_share FoX_dom FoX_wxml FoX_sax FoX_common FoX_utils FoX_fsys) - if(NOT BLD_STANDALONE AND ${COMP} STREQUAL "cdeps_share") - continue() - endif() install(TARGETS ${COMP} EXPORT ${COMP} LIBRARY DESTINATION lib @@ -93,6 +89,18 @@ foreach(COMP datm dice dlnd docn drof dwav streams dshr cdeps_share FoX_dom FoX_ DESTINATION lib/cmake) endforeach(COMP) -if (NOT DEFINED ENV{DESTDIR}) +foreach(DEPS streams dshr cdeps_share FoX_dom FoX_wxml FoX_sax FoX_common FoX_utils FoX_fsys) + if(NOT BLD_STANDALONE AND ${DEPS} STREQUAL "cdeps_share") + continue() + endif() + install(TARGETS ${DEPS} + EXPORT ${DEPS} + LIBRARY DESTINATION lib + COMPONENT Library) + install(EXPORT ${DEPS} + DESTINATION lib/cmake) +endforeach(COMP) + +if(BLD_STANDALONE) install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mod DESTINATION ${CMAKE_INSTALL_PREFIX}/CDEPS) endif() From 5da53f448862b0ec4557c4aaa34ea1c71313c628 Mon Sep 17 00:00:00 2001 From: Ufuk Turuncoglu Date: Wed, 20 Jan 2021 00:59:16 -0600 Subject: [PATCH 152/153] fix the standalone build outside of any application --- CMakeLists.txt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6b5b95b46..2e764ab3c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -100,7 +100,3 @@ foreach(DEPS streams dshr cdeps_share FoX_dom FoX_wxml FoX_sax FoX_common FoX_ut install(EXPORT ${DEPS} DESTINATION lib/cmake) endforeach(COMP) - -if(BLD_STANDALONE) - install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/mod DESTINATION ${CMAKE_INSTALL_PREFIX}/CDEPS) -endif() From c4583cf31b49eb32bd610f709bced834603eddcd Mon Sep 17 00:00:00 2001 From: "Bin.Li" Date: Tue, 26 Jan 2021 19:42:28 +0000 Subject: [PATCH 153/153] Updated atm_comp_nuopc.F90,datm_datamode_cfsr_mod.F90 and CMakeLists.txt. --- datm/CMakeLists.txt | 1 + datm/atm_comp_nuopc.F90 | 23 +++ datm/datm_datamode_cfsr_mod.F90 | 283 ++++++++++++++++++++++++++++++++ 3 files changed, 307 insertions(+) create mode 100644 datm/datm_datamode_cfsr_mod.F90 diff --git a/datm/CMakeLists.txt b/datm/CMakeLists.txt index 8688b87cc..325959ec3 100644 --- a/datm/CMakeLists.txt +++ b/datm/CMakeLists.txt @@ -4,6 +4,7 @@ set(SRCFILES atm_comp_nuopc.F90 datm_datamode_cplhist_mod.F90 datm_datamode_core2_mod.F90 datm_datamode_jra_mod.F90 + datm_datamode_cfsr_mod.F90 datm_datamode_era5_mod.F90) diff --git a/datm/atm_comp_nuopc.F90 b/datm/atm_comp_nuopc.F90 index d14964a3d..6c69e9f25 100644 --- a/datm/atm_comp_nuopc.F90 +++ b/datm/atm_comp_nuopc.F90 @@ -65,6 +65,12 @@ module atm_comp_nuopc use datm_datamode_era5_mod , only : datm_datamode_era5_restart_write use datm_datamode_era5_mod , only : datm_datamode_era5_restart_read + use datm_datamode_cfsr_mod , only : datm_datamode_cfsr_advertise + use datm_datamode_cfsr_mod , only : datm_datamode_cfsr_init_pointers + use datm_datamode_cfsr_mod , only : datm_datamode_cfsr_advance + use datm_datamode_cfsr_mod , only : datm_datamode_cfsr_restart_write + use datm_datamode_cfsr_mod , only : datm_datamode_cfsr_restart_read + implicit none private ! except @@ -303,6 +309,7 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) trim(datamode) == 'CORE_IAF_JRA' .or. & trim(datamode) == 'CLMNCEP' .or. & trim(datamode) == 'CPLHIST' .or. & + trim(datamode) == 'CFSR' .or. & trim(datamode) == 'ERA5') then else call shr_sys_abort(' ERROR illegal datm datamode = '//trim(datamode)) @@ -328,6 +335,9 @@ subroutine InitializeAdvertise(gcomp, importState, exportState, clock, rc) case ('ERA5') call datm_datamode_era5_advertise(exportState, fldsExport, flds_scalar_name, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return + case ('CFSR') + call datm_datamode_cfsr_advertise(exportState, fldsExport, flds_scalar_name, rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return end select end subroutine InitializeAdvertise @@ -567,6 +577,9 @@ subroutine datm_comp_run(importState, exportState, target_ymd, target_tod, targe case('ERA5') call datm_datamode_era5_init_pointers(exportState, sdat, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return + case('CFSR') + call datm_datamode_cfsr_init_pointers(exportState, sdat, rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return end select ! Read restart if needed @@ -582,6 +595,8 @@ subroutine datm_comp_run(importState, exportState, target_ymd, target_tod, targe call datm_datamode_cplhist_restart_read(restfilm, inst_suffix, logunit, my_task, mpicom, sdat) case('ERA5') call datm_datamode_era5_restart_read(restfilm, inst_suffix, logunit, my_task, mpicom, sdat) + case('CFSR') + call datm_datamode_cfsr_restart_read(restfilm, inst_suffix, logunit, my_task, mpicom, sdat) end select end if @@ -629,6 +644,10 @@ subroutine datm_comp_run(importState, exportState, target_ymd, target_tod, targe call datm_datamode_era5_advance(exportstate, masterproc, logunit, mpicom, target_ymd, & target_tod, sdat%model_calendar, rc) if (ChkErr(rc,__LINE__,u_FILE_u)) return + case('CFSR') + call datm_datamode_cfsr_advance(exportstate, masterproc, logunit, mpicom, target_ymd, & + target_tod, sdat%model_calendar, rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return end select ! Write restarts if needed @@ -654,6 +673,10 @@ subroutine datm_comp_run(importState, exportState, target_ymd, target_tod, targe call datm_datamode_era5_restart_write(case_name, inst_suffix, target_ymd, target_tod, & logunit, my_task, sdat) if (ChkErr(rc,__LINE__,u_FILE_u)) return + case('CFSR') + call datm_datamode_cfsr_restart_write(case_name, inst_suffix, target_ymd, target_tod, & + logunit, my_task, sdat) + if (ChkErr(rc,__LINE__,u_FILE_u)) return end select end if diff --git a/datm/datm_datamode_cfsr_mod.F90 b/datm/datm_datamode_cfsr_mod.F90 new file mode 100644 index 000000000..aab84d851 --- /dev/null +++ b/datm/datm_datamode_cfsr_mod.F90 @@ -0,0 +1,283 @@ +module datm_datamode_cfsr_mod + + use ESMF + use NUOPC , only : NUOPC_Advertise + use shr_kind_mod , only : r8=>shr_kind_r8, i8=>shr_kind_i8, cl=>shr_kind_cl, cs=>shr_kind_cs + use shr_sys_mod , only : shr_sys_abort + use shr_precip_mod , only : shr_precip_partition_rain_snow_ramp + use shr_mpi_mod , only : shr_mpi_max + use shr_const_mod , only : shr_const_tkfrz, shr_const_rhofw, shr_const_rdair + use dshr_methods_mod , only : dshr_state_getfldptr, chkerr + use dshr_strdata_mod , only : shr_strdata_type, shr_strdata_get_stream_pointer + use dshr_mod , only : dshr_restart_read, dshr_restart_write + use dshr_strdata_mod , only : shr_strdata_type + use dshr_fldlist_mod , only : fldlist_type, dshr_fldlist_add + + implicit none + private ! except + + public :: datm_datamode_cfsr_advertise + public :: datm_datamode_cfsr_init_pointers + public :: datm_datamode_cfsr_advance + public :: datm_datamode_cfsr_restart_write + public :: datm_datamode_cfsr_restart_read +! private :: datm_eSat ! determine saturation vapor pressure + + ! export state data + real(r8), pointer :: Sa_z(:) => null() + real(r8), pointer :: Sa_u(:) => null() + real(r8), pointer :: Sa_v(:) => null() + real(r8), pointer :: Sa_tbot(:) => null() + real(r8), pointer :: Sa_shum(:) => null() + real(r8), pointer :: Sa_pbot(:) => null() + real(r8), pointer :: Faxa_lwdn(:) => null() + real(r8), pointer :: Faxa_rain(:) => null() + real(r8), pointer :: Faxa_snow(:) => null() + real(r8), pointer :: Faxa_swndr(:) => null() + real(r8), pointer :: Faxa_swndf(:) => null() + real(r8), pointer :: Faxa_swvdr(:) => null() + real(r8), pointer :: Faxa_swvdf(:) => null() + + ! stream data + real(r8), pointer :: strm_mask(:) => null() + + real(r8) :: tbotmax ! units detector + real(r8) :: maskmax ! units detector + + real(r8) , parameter :: tKFrz = SHR_CONST_TKFRZ + real(r8) , parameter :: rdair = SHR_CONST_RDAIR ! dry air gas constant ~ J/K/kg + real(r8) , parameter :: rhofw = SHR_CONST_RHOFW ! density of fresh water ~ kg/m^3 + + character(*), parameter :: nullstr = 'undefined' + character(*), parameter :: rpfile = 'rpointer.atm' + character(*), parameter :: u_FILE_u = & + __FILE__ + +!=============================================================================== +contains +!=============================================================================== + + subroutine datm_datamode_cfsr_advertise(exportState, fldsexport, & + flds_scalar_name, rc) + + ! input/output variables + type(esmf_State) , intent(inout) :: exportState + type(fldlist_type) , pointer :: fldsexport + character(len=*) , intent(in) :: flds_scalar_name + integer , intent(out) :: rc + + ! local variables + type(fldlist_type), pointer :: fldList + !------------------------------------------------------------------------------- + + rc = ESMF_SUCCESS + + call dshr_fldList_add(fldsExport, trim(flds_scalar_name)) + call dshr_fldList_add(fldsExport, 'Sa_z' ) + call dshr_fldList_add(fldsExport, 'Sa_u' ) + call dshr_fldList_add(fldsExport, 'Sa_v' ) + call dshr_fldList_add(fldsExport, 'Sa_tbot' ) + call dshr_fldList_add(fldsExport, 'Sa_pbot' ) + call dshr_fldList_add(fldsExport, 'Sa_shum' ) + call dshr_fldList_add(fldsExport, 'Faxa_rain' ) + call dshr_fldList_add(fldsExport, 'Faxa_snow' ) + call dshr_fldList_add(fldsExport, 'Faxa_swndr' ) + call dshr_fldList_add(fldsExport, 'Faxa_swvdr' ) + call dshr_fldList_add(fldsExport, 'Faxa_swndf' ) + call dshr_fldList_add(fldsExport, 'Faxa_swvdf' ) + call dshr_fldList_add(fldsExport, 'Faxa_lwdn' ) + + fldlist => fldsExport ! the head of the linked list + do while (associated(fldlist)) + call NUOPC_Advertise(exportState, standardName=fldlist%stdname, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call ESMF_LogWrite('(datm_comp_advertise): Fr_atm '//trim(fldList%stdname), ESMF_LOGMSG_INFO) + fldList => fldList%next + enddo + + end subroutine datm_datamode_cfsr_advertise + + !=============================================================================== + subroutine datm_datamode_cfsr_init_pointers(exportState, sdat, rc) + + ! input/output variables + type(ESMF_State) , intent(inout) :: exportState + type(shr_strdata_type) , intent(in) :: sdat + integer , intent(out) :: rc + + ! local variables + character(len=*), parameter :: subname='(datm_init_pointers): ' + !------------------------------------------------------------------------------- + + rc = ESMF_SUCCESS + + ! initialize pointers for module level stream arrays + call shr_strdata_get_stream_pointer( sdat, 'Sa_mask' , strm_mask , rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + + ! get export state pointers + call dshr_state_getfldptr(exportState, 'Sa_z' , fldptr1=Sa_z , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Sa_u' , fldptr1=Sa_u , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Sa_v' , fldptr1=Sa_v , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Sa_tbot' , fldptr1=Sa_tbot , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Sa_pbot' , fldptr1=Sa_pbot , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Sa_shum' , fldptr1=Sa_shum , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Faxa_rain' , fldptr1=Faxa_rain , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Faxa_snow' , fldptr1=Faxa_snow, rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Faxa_swvdr' , fldptr1=Faxa_swvdr , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Faxa_swvdf' , fldptr1=Faxa_swvdf , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Faxa_swndr' , fldptr1=Faxa_swndr , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Faxa_swndf' , fldptr1=Faxa_swndf , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + call dshr_state_getfldptr(exportState, 'Faxa_lwdn' , fldptr1=Faxa_lwdn , rc=rc) + if (ChkErr(rc,__LINE__,u_FILE_u)) return + + end subroutine datm_datamode_cfsr_init_pointers + + !=============================================================================== + subroutine datm_datamode_cfsr_advance(exportstate, masterproc, logunit, mpicom, target_ymd, target_tod, model_calendar, rc) + + ! input/output variables + type(ESMF_State) , intent(inout) :: exportState + logical , intent(in) :: masterproc + integer , intent(in) :: logunit + integer , intent(in) :: mpicom + integer , intent(in) :: target_ymd + integer , intent(in) :: target_tod + character(len=*) , intent(in) :: model_calendar + integer , intent(out) :: rc + + ! local variables + logical :: first_time = .true. + integer :: n ! indices + integer :: lsize ! size of attr vect + real(r8) :: rtmp + real(r8) :: tbot, pbot +! real(r8) :: vp + real(r8) :: e, qsat + character(len=*), parameter :: subname='(datm_datamode_cfsr_advance): ' + !------------------------------------------------------------------------------- + + rc = ESMF_SUCCESS + + lsize = size(strm_mask) + + if (first_time) then + ! determine tbotmax (see below for use) + rtmp = maxval(Sa_tbot(:)) + call shr_mpi_max(rtmp, tbotmax, mpicom, 'datm_tbot', all=.true.) + if (masterproc) write(logunit,*) trim(subname),' tbotmax = ',tbotmax + + ! determine maskmax (see below for use) + rtmp = maxval(strm_mask(:)) + call shr_mpi_max(rtmp, maskmax, mpicom, 'datm_mask', all=.true.) + if (masterproc) write(logunit,*) trim(subname),' maskmax = ',maskmax + + ! reset first_time + first_time = .false. + end if + + do n = 1, lsize + !--- bottom layer height --- +! Sa_z(n) = 10.0_r8 + + !--- calculate wind speed --- +! if (associated(Sa_wspd)) then +! Sa_wspd(n) = sqrt(Sa_u(n)*Sa_u(n)+Sa_v(n)*Sa_v(n)) +! end if + + !--- temperature --- + if (tbotmax < 50.0_r8) Sa_tbot(n) = Sa_tbot(n) + tkFrz + ! Limit very cold forcing to 180K + Sa_tbot(n) = max(180._r8, Sa_tbot(n)) +! Sa_ptem(n) = Sa_tbot(n) + end do + + !---------------------------------------------------------- + ! unit conversions (temporal resolution is hourly) + !---------------------------------------------------------- + + ! convert J/m^2 to W/m^2 + !Faxa_lwdn(:) = Faxa_lwdn(:)/3600.0_r8 +! Faxa_lwdn(:) = Faxa_lwdn(:)/21600.0_r8 +! if (associated(Faxa_lwnet)) then +! Faxa_lwnet(:) = Faxa_lwnet(:)/3600.0_r8 +! end if +! Faxa_swdn(:) = Faxa_swdn(:)/3600.0_r8 +! Faxa_swdn(:) = Faxa_swdn(:)/21600.0_r8 + !Faxa_swvdr(:) = Faxa_swvdr(:)/3600.0_r8 + !Faxa_swndr(:) = Faxa_swndr(:)/3600.0_r8 + !Faxa_swvdf(:) = Faxa_swvdf(:)/3600.0_r8 + !Faxa_swndf(:) = Faxa_swndf(:)/3600.0_r8 +! Faxa_swvdr(:) = Faxa_swvdr(:)/21600.0_r8 +! Faxa_swndr(:) = Faxa_swndr(:)/21600.0_r8 +! Faxa_swvdf(:) = Faxa_swvdf(:)/21600.0_r8 +! Faxa_swndf(:) = Faxa_swndf(:)/21600.0_r8 +! Faxa_swnet(:) = Faxa_swnet(:)/3600.0_r8 +! Faxa_sen(:) = Faxa_sen(:)/3600.0_r8 +! Faxa_lat(:) = Faxa_lat(:)/3600.0_r8 + + ! convert m to kg/m^2/s + !Faxa_rain(:) = Faxa_rain(:)/3600.0_r8*rhofw +! Faxa_rain(:) = Faxa_rain(:)/21600.0_r8*rhofw +! Faxa_rainc(:) = Faxa_rainc(:)/3600.0_r8*rhofw +! Faxa_rainl(:) = Faxa_rainl(:)/3600.0_r8*rhofw +! Faxa_snowc(:) = Faxa_snowc(:)/3600.0_r8*rhofw + !Faxa_snow(:) = Faxa_snow(:)/3600.0_r8*rhofw +! Faxa_snow(:) = Faxa_snow(:)/21600.0_r8*rhofw + + ! convert N/m^2 s to N/m^2 +! Faxa_taux(:) = Faxa_taux(:)/3600.0_r8 +! Faxa_tauy(:) = Faxa_tauy(:)/3600.0_r8 +! Faxa_taux(:) = Faxa_taux(:)/21600.0_r8 +! Faxa_tauy(:) = Faxa_tauy(:)/21600.0_r8 + + end subroutine datm_datamode_cfsr_advance + + !=============================================================================== + subroutine datm_datamode_cfsr_restart_write(case_name, inst_suffix, ymd, tod, & + logunit, my_task, sdat) + + ! input/output variables + character(len=*) , intent(in) :: case_name + character(len=*) , intent(in) :: inst_suffix + integer , intent(in) :: ymd ! model date + integer , intent(in) :: tod ! model sec into model date + integer , intent(in) :: logunit + integer , intent(in) :: my_task + type(shr_strdata_type) , intent(inout) :: sdat + !------------------------------------------------------------------------------- + + call dshr_restart_write(rpfile, case_name, 'datm', inst_suffix, ymd, tod, & + logunit, my_task, sdat) + + end subroutine datm_datamode_cfsr_restart_write + + !=============================================================================== + subroutine datm_datamode_cfsr_restart_read(rest_filem, inst_suffix, logunit, my_task, mpicom, sdat) + + ! input/output arguments + character(len=*) , intent(inout) :: rest_filem + character(len=*) , intent(in) :: inst_suffix + integer , intent(in) :: logunit + integer , intent(in) :: my_task + integer , intent(in) :: mpicom + type(shr_strdata_type) , intent(inout) :: sdat + !------------------------------------------------------------------------------- + + call dshr_restart_read(rest_filem, rpfile, inst_suffix, nullstr, logunit, my_task, mpicom, sdat) + + end subroutine datm_datamode_cfsr_restart_read + +end module datm_datamode_cfsr_mod