From f7b8f4e7523a280580e60da093d7c44e7d7281ba Mon Sep 17 00:00:00 2001 From: Benjamin Auer Date: Thu, 16 Jan 2025 17:14:58 -0500 Subject: [PATCH 1/3] fixes #3338 --- Tests/ExtDataRoot_GridComp.F90 | 43 ++++++------------- gridcomps/ExtData2G/ExtDataBracket.F90 | 21 ++++++--- .../ExtData2G/ExtDataSimpleFileHandler.F90 | 6 ++- 3 files changed, 33 insertions(+), 37 deletions(-) diff --git a/Tests/ExtDataRoot_GridComp.F90 b/Tests/ExtDataRoot_GridComp.F90 index 38504a9da6e6..f54db0563138 100644 --- a/Tests/ExtDataRoot_GridComp.F90 +++ b/Tests/ExtDataRoot_GridComp.F90 @@ -677,12 +677,8 @@ subroutine CompareState(State1,State2,tol,rc) integer :: status integer :: i - real, pointer :: ptr3_1(:,:,:) - real, pointer :: ptr3_2(:,:,:) - real, pointer :: ptr2_1(:,:) - real, pointer :: ptr2_2(:,:) - real, pointer :: ptr1_1(:) - real, pointer :: ptr1_2(:) + real, pointer :: ptr1(:) + real, pointer :: ptr2(:) integer :: itemcount,rank1,rank2 character(len=ESMF_MAXSTR), allocatable :: NameList(:) logical, allocatable :: foundDiff(:) @@ -696,6 +692,7 @@ subroutine CompareState(State1,State2,tol,rc) _VERIFY(status) call ESMF_StateGet(State1,itemNameList=NameList,_RC) do i=1,itemCount + write(*,*)'comparing ',trim(nameList(i)) call ESMF_StateGet(State1,trim(nameList(i)),field1,_RC) call ESMF_StateGet(State2,trim(nameList(i)),field2,_RC) call ESMF_FieldGet(field1,rank=rank1,_RC) @@ -706,29 +703,17 @@ subroutine CompareState(State1,State2,tol,rc) exit end if _ASSERT(rank1==rank2,'needs informative message') + call assign_fptr(field1, ptr1, _RC) + call assign_fptr(field2, ptr2, _RC) + write(*,*)'bmaa max ',maxval(ptr1),maxval(ptr2) + _ASSERT(size(ptr1)==size(ptr2),'needs informative message') foundDiff(i)=.false. - if (rank1==1) then - call MAPL_GetPointer(state1,ptr1_1,trim(nameList(i)),_RC) - call MAPL_GetPointer(state2,ptr1_2,trim(nameList(i)),_RC) - if (any((ptr1_1-ptr1_2) > tol)) then - foundDiff(i) = .true. - end if - else if (rank1==2) then - call MAPL_GetPointer(state1,ptr2_1,trim(nameList(i)),_RC) - call MAPL_GetPointer(state2,ptr2_2,trim(nameList(i)),_RC) - if (any((ptr2_1-ptr2_2) > tol)) then - foundDiff(i) = .true. - end if - else if (rank1==3) then - call MAPL_GetPointer(state1,ptr3_1,trim(nameList(i)),_RC) - call MAPL_GetPointer(state2,ptr3_2,trim(nameList(i)),_RC) - if (any((ptr3_1-ptr3_2) > tol)) then - foundDiff(i) = .true. - end if - end if - if (foundDiff(i)) then - _FAIL('found difference when compare state') + if (any(abs(ptr1-ptr2) > tol)) then + foundDiff(i) = .true. end if + !if (foundDiff(i)) then + !_FAIL('found difference when compare state') + !end if enddo _RETURN(ESMF_SUCCESS) @@ -741,10 +726,8 @@ subroutine ForceAllocation(state,rc) integer :: status - real, pointer :: ptr3d(:,:,:) - real, pointer :: ptr2d(:,:) integer :: ii - integer :: itemcount,dims + integer :: itemcount character(len=ESMF_MAXSTR), allocatable :: NameList(:) type (ESMF_StateItem_Flag), allocatable :: itemTypeList(:) type(ESMF_Field) :: Field diff --git a/gridcomps/ExtData2G/ExtDataBracket.F90 b/gridcomps/ExtData2G/ExtDataBracket.F90 index c3d0a1023571..f46ee9273266 100644 --- a/gridcomps/ExtData2G/ExtDataBracket.F90 +++ b/gridcomps/ExtData2G/ExtDataBracket.F90 @@ -188,10 +188,13 @@ subroutine interpolate_to_time(this,field,time,rc) right_node_set = this%right_node%check_if_initialized(_RC) left_node_set = this%left_node%check_if_initialized(_RC) - call this%right_node%get(file=right_file) - call this%left_node%get(file=left_file) - right_node_set = right_file /= file_not_found - left_node_set = left_file /= file_not_found + write(*,*)'bmaa first check ',left_node_set,right_node_set,this%exact + call ESMF_TimePrint(this%left_node%time,options='string',preString='left bracket time: ') + call ESMF_TimePrint(this%right_node%time,options='string',preString='right bracket time: ') + !call this%right_node%get(file=right_file) + !call this%left_node%get(file=left_file) + !right_node_set = right_file /= file_not_found + !left_node_set = left_file /= file_not_found alpha = 0.0 if ( (.not.this%disable_interpolation) .and. (.not.this%intermittent_disable) .and. right_node_set .and. left_node_set) then @@ -206,6 +209,7 @@ subroutine interpolate_to_time(this,field,time,rc) if (left_node_set) then call assign_fptr(this%left_node%field,var1d_left,_RC) end if + write(*,*)'bmaa inter: ',left_node_set, right_node_set,this%new_file_left, this%new_file_right if ( left_node_set .and. (time == this%left_node%time .or. this%disable_interpolation)) then var1d = var1d_left else if (right_node_set .and. (time == this%right_node%time)) then @@ -216,7 +220,10 @@ subroutine interpolate_to_time(this,field,time,rc) elsewhere var1d = mapl_undef endwhere - else + end if + + if (this%exact .and. (.not.(time == this%left_node%time))) then + !write(*,*)'bmaa setting undef' var1d = mapl_undef end if @@ -243,10 +250,14 @@ subroutine swap_node_fields(this,rc) left_created = ESMF_FieldIsCreated(this%left_node%field,_RC) right_created = ESMF_FieldIsCreated(this%right_node%field,_RC) + write(*,*)'bmaa swapping nodes ',left_created,right_created + left_created = ESMF_FieldIsCreated(this%left_node%field,_RC) if (left_created .and. right_created) then call assign_fptr(this%left_node%field,left_ptr,_RC) call assign_fptr(this%right_node%field,right_ptr,_RC) + write(*,*)'bmaa LR before: ',maxval(left_ptr),maxval(right_ptr) left_ptr = right_ptr + write(*,*)'bmaa LR after: ',maxval(left_ptr),maxval(right_ptr) end if _RETURN(_SUCCESS) end subroutine swap_node_fields diff --git a/gridcomps/ExtData2G/ExtDataSimpleFileHandler.F90 b/gridcomps/ExtData2G/ExtDataSimpleFileHandler.F90 index 4af0071f29a1..eb92f37e910f 100644 --- a/gridcomps/ExtData2G/ExtDataSimpleFileHandler.F90 +++ b/gridcomps/ExtData2G/ExtDataSimpleFileHandler.F90 @@ -105,8 +105,10 @@ subroutine get_file_bracket(this, input_time, source_time, bracket, fail_on_miss call bracket%set_node('L',file=current_file,time_index=time_index,time=time,was_set=.true.,_RC) if (in_range .and. (bracket%left_node == bracket%right_node)) then - call bracket%swap_node_fields(_RC) - bracket%new_file_left = .false. + if (.not. (current_file == file_not_found)) then + call bracket%swap_node_fields(_RC) + bracket%new_file_left = .false. + end if else if (time_index == time_not_found ) then call this%get_file(current_file,target_time,-1,allow_missing_file,_RC) From b94da73fd0bd51f005ff83091210cb5e4aa3198b Mon Sep 17 00:00:00 2001 From: Benjamin Auer Date: Tue, 21 Jan 2025 11:16:49 -0500 Subject: [PATCH 2/3] more updates --- Tests/ExtDataRoot_GridComp.F90 | 8 +++--- .../test_cases/case37/AGCM1.rc | 22 ++++++++++++++++ .../test_cases/case37/AGCM2.rc | 22 ++++++++++++++++ .../test_cases/case37/AGCM3.rc | 26 +++++++++++++++++++ .../test_cases/case37/CAP.rc | 5 ++++ .../test_cases/case37/CAP1.rc | 8 ++++++ .../test_cases/case37/CAP2.rc | 8 ++++++ .../test_cases/case37/CAP3.rc | 9 +++++++ .../test_cases/case37/ExtData.rc | 12 +++++++++ .../test_cases/case37/HISTORY1.rc | 13 ++++++++++ .../test_cases/case37/HISTORY2.rc | 13 ++++++++++ .../test_cases/case37/HISTORY3.rc | 13 ++++++++++ .../test_cases/case37/README | 1 + .../test_cases/case37/extdata.yaml | 12 +++++++++ .../test_cases/extdata_2g_cases.txt | 1 + gridcomps/ExtData2G/ExtDataBracket.F90 | 10 ------- 16 files changed, 168 insertions(+), 15 deletions(-) create mode 100644 Tests/ExtData_Testing_Framework/test_cases/case37/AGCM1.rc create mode 100644 Tests/ExtData_Testing_Framework/test_cases/case37/AGCM2.rc create mode 100644 Tests/ExtData_Testing_Framework/test_cases/case37/AGCM3.rc create mode 100644 Tests/ExtData_Testing_Framework/test_cases/case37/CAP.rc create mode 100644 Tests/ExtData_Testing_Framework/test_cases/case37/CAP1.rc create mode 100644 Tests/ExtData_Testing_Framework/test_cases/case37/CAP2.rc create mode 100644 Tests/ExtData_Testing_Framework/test_cases/case37/CAP3.rc create mode 100644 Tests/ExtData_Testing_Framework/test_cases/case37/ExtData.rc create mode 100644 Tests/ExtData_Testing_Framework/test_cases/case37/HISTORY1.rc create mode 100644 Tests/ExtData_Testing_Framework/test_cases/case37/HISTORY2.rc create mode 100644 Tests/ExtData_Testing_Framework/test_cases/case37/HISTORY3.rc create mode 100644 Tests/ExtData_Testing_Framework/test_cases/case37/README create mode 100644 Tests/ExtData_Testing_Framework/test_cases/case37/extdata.yaml diff --git a/Tests/ExtDataRoot_GridComp.F90 b/Tests/ExtDataRoot_GridComp.F90 index f54db0563138..7578d4b5f797 100644 --- a/Tests/ExtDataRoot_GridComp.F90 +++ b/Tests/ExtDataRoot_GridComp.F90 @@ -692,7 +692,6 @@ subroutine CompareState(State1,State2,tol,rc) _VERIFY(status) call ESMF_StateGet(State1,itemNameList=NameList,_RC) do i=1,itemCount - write(*,*)'comparing ',trim(nameList(i)) call ESMF_StateGet(State1,trim(nameList(i)),field1,_RC) call ESMF_StateGet(State2,trim(nameList(i)),field2,_RC) call ESMF_FieldGet(field1,rank=rank1,_RC) @@ -705,15 +704,14 @@ subroutine CompareState(State1,State2,tol,rc) _ASSERT(rank1==rank2,'needs informative message') call assign_fptr(field1, ptr1, _RC) call assign_fptr(field2, ptr2, _RC) - write(*,*)'bmaa max ',maxval(ptr1),maxval(ptr2) _ASSERT(size(ptr1)==size(ptr2),'needs informative message') foundDiff(i)=.false. if (any(abs(ptr1-ptr2) > tol)) then foundDiff(i) = .true. end if - !if (foundDiff(i)) then - !_FAIL('found difference when compare state') - !end if + if (foundDiff(i)) then + _FAIL('found difference when compare state') + end if enddo _RETURN(ESMF_SUCCESS) diff --git a/Tests/ExtData_Testing_Framework/test_cases/case37/AGCM1.rc b/Tests/ExtData_Testing_Framework/test_cases/case37/AGCM1.rc new file mode 100644 index 000000000000..89bb19cdc467 --- /dev/null +++ b/Tests/ExtData_Testing_Framework/test_cases/case37/AGCM1.rc @@ -0,0 +1,22 @@ +NX: 1 +NY: 1 + +Root.GRID_TYPE: LatLon +Root.GRIDNAME: DC90x45-PC +Root.LM: 3 +Root.IM_WORLD: 90 +Root.JM_WORLD: 45 +Root.POLE: 'PC' +Root.DATELINE: 'DC' + +RUN_MODE: GenerateExports + +EXPORT_STATE:: +VAR1 , time , days , xy , c +:: + +FILL_DEF:: +VAR1 time +:: + +REF_TIME: 20070927 000000 diff --git a/Tests/ExtData_Testing_Framework/test_cases/case37/AGCM2.rc b/Tests/ExtData_Testing_Framework/test_cases/case37/AGCM2.rc new file mode 100644 index 000000000000..6c9fc5049b44 --- /dev/null +++ b/Tests/ExtData_Testing_Framework/test_cases/case37/AGCM2.rc @@ -0,0 +1,22 @@ +NX: 1 +NY: 1 + +Root.GRID_TYPE: LatLon +Root.GRIDNAME: DC90x45-PC +Root.LM: 3 +Root.IM_WORLD: 90 +Root.JM_WORLD: 90 +Root.POLE: 'PC' +Root.DATELINE: 'DC' + +RUN_MODE: GenerateExports + +EXPORT_STATE:: +VAR1 , time , days , xy , c +:: + +FILL_DEF:: +VAR1 time +:: + +REF_TIME: 20070927 000000 diff --git a/Tests/ExtData_Testing_Framework/test_cases/case37/AGCM3.rc b/Tests/ExtData_Testing_Framework/test_cases/case37/AGCM3.rc new file mode 100644 index 000000000000..82b3c952c396 --- /dev/null +++ b/Tests/ExtData_Testing_Framework/test_cases/case37/AGCM3.rc @@ -0,0 +1,26 @@ +NX: 1 +NY: 1 + +Root.GRID_TYPE: LatLon +Root.GRIDNAME: DC900x45-PC +Root.LM: 3 +Root.IM_WORLD: 90 +Root.JM_WORLD: 45 +Root.POLE: 'PC' +Root.DATELINE: 'DC' + +RUN_MODE: CompareImports + +IMPORT_STATE:: +VAR1 , time , days , xy , c +:: + +EXPORT_STATE:: +VAR1 , time , days , xy , c +:: + +FILL_DEF:: +VAR1 3.0 +:: + +REF_TIME: 20080101 000000 diff --git a/Tests/ExtData_Testing_Framework/test_cases/case37/CAP.rc b/Tests/ExtData_Testing_Framework/test_cases/case37/CAP.rc new file mode 100644 index 000000000000..7cbd02ce9493 --- /dev/null +++ b/Tests/ExtData_Testing_Framework/test_cases/case37/CAP.rc @@ -0,0 +1,5 @@ +CASES:: +CAP1.rc +CAP2.rc +CAP3.rc +:: diff --git a/Tests/ExtData_Testing_Framework/test_cases/case37/CAP1.rc b/Tests/ExtData_Testing_Framework/test_cases/case37/CAP1.rc new file mode 100644 index 000000000000..f1b99b9cab61 --- /dev/null +++ b/Tests/ExtData_Testing_Framework/test_cases/case37/CAP1.rc @@ -0,0 +1,8 @@ +ROOT_NAME: Root +ROOT_CF: AGCM1.rc +HIST_CF: HISTORY1.rc + +BEG_DATE: 20070926 230000 + +JOB_SGMT: 00000004 000000 +HEARTBEAT_DT: 3600 diff --git a/Tests/ExtData_Testing_Framework/test_cases/case37/CAP2.rc b/Tests/ExtData_Testing_Framework/test_cases/case37/CAP2.rc new file mode 100644 index 000000000000..9aca6b5d8f8f --- /dev/null +++ b/Tests/ExtData_Testing_Framework/test_cases/case37/CAP2.rc @@ -0,0 +1,8 @@ +ROOT_NAME: Root +ROOT_CF: AGCM2.rc +HIST_CF: HISTORY2.rc + +BEG_DATE: 20071001 210000 + +JOB_SGMT: 00000003 000000 +HEARTBEAT_DT: 3600 diff --git a/Tests/ExtData_Testing_Framework/test_cases/case37/CAP3.rc b/Tests/ExtData_Testing_Framework/test_cases/case37/CAP3.rc new file mode 100644 index 000000000000..7c38ccd7fc75 --- /dev/null +++ b/Tests/ExtData_Testing_Framework/test_cases/case37/CAP3.rc @@ -0,0 +1,9 @@ +ROOT_NAME: Root +ROOT_CF: AGCM3.rc +HIST_CF: HISTORY3.rc + +BEG_DATE: 20070930 000000 + +JOB_SGMT: 00000001 120000 +HEARTBEAT_DT: 3600 + diff --git a/Tests/ExtData_Testing_Framework/test_cases/case37/ExtData.rc b/Tests/ExtData_Testing_Framework/test_cases/case37/ExtData.rc new file mode 100644 index 000000000000..1b98d7c432b9 --- /dev/null +++ b/Tests/ExtData_Testing_Framework/test_cases/case37/ExtData.rc @@ -0,0 +1,12 @@ +#CASE_SENSITIVE_VARIABLE_NAMES: .false. +Ext_AllowExtrap: .false. +Prefetch: .true. +DEBUG_LEVEL: 20 + +PrimaryExports%% +VAR2D NA 2008 N 0 none none VAR2D case1.nc4 +%% + + +DerivedExports%% +%% diff --git a/Tests/ExtData_Testing_Framework/test_cases/case37/HISTORY1.rc b/Tests/ExtData_Testing_Framework/test_cases/case37/HISTORY1.rc new file mode 100644 index 000000000000..eb8896a731fc --- /dev/null +++ b/Tests/ExtData_Testing_Framework/test_cases/case37/HISTORY1.rc @@ -0,0 +1,13 @@ +GRID_LABELS: +:: + +COLLECTIONS: case1 +:: + + case1.template: '%y4%m2%d2.nc4', + case1.format: 'CFIO', + case1.frequency: 240000, + #case1.duration: 000000, + case1.ref_time: 000000, + case1.fields: 'VAR1', 'Root', + :: diff --git a/Tests/ExtData_Testing_Framework/test_cases/case37/HISTORY2.rc b/Tests/ExtData_Testing_Framework/test_cases/case37/HISTORY2.rc new file mode 100644 index 000000000000..eb8896a731fc --- /dev/null +++ b/Tests/ExtData_Testing_Framework/test_cases/case37/HISTORY2.rc @@ -0,0 +1,13 @@ +GRID_LABELS: +:: + +COLLECTIONS: case1 +:: + + case1.template: '%y4%m2%d2.nc4', + case1.format: 'CFIO', + case1.frequency: 240000, + #case1.duration: 000000, + case1.ref_time: 000000, + case1.fields: 'VAR1', 'Root', + :: diff --git a/Tests/ExtData_Testing_Framework/test_cases/case37/HISTORY3.rc b/Tests/ExtData_Testing_Framework/test_cases/case37/HISTORY3.rc new file mode 100644 index 000000000000..720dd45ecd3d --- /dev/null +++ b/Tests/ExtData_Testing_Framework/test_cases/case37/HISTORY3.rc @@ -0,0 +1,13 @@ +GRID_LABELS: +:: + +COLLECTIONS: +:: + + case2.template: 'nc4', + case2.format: 'CFIO', + case2.frequency: 240000, + case2.duration: 000000, + case2.ref_time: 000000, + case2.fields: 'VAR2D', 'Root', + :: diff --git a/Tests/ExtData_Testing_Framework/test_cases/case37/README b/Tests/ExtData_Testing_Framework/test_cases/case37/README new file mode 100644 index 000000000000..6ea1c769dbad --- /dev/null +++ b/Tests/ExtData_Testing_Framework/test_cases/case37/README @@ -0,0 +1 @@ +test multiple datasets where an export uses both with with no extrapolation outside and crosses transition date diff --git a/Tests/ExtData_Testing_Framework/test_cases/case37/extdata.yaml b/Tests/ExtData_Testing_Framework/test_cases/case37/extdata.yaml new file mode 100644 index 000000000000..147776977cc8 --- /dev/null +++ b/Tests/ExtData_Testing_Framework/test_cases/case37/extdata.yaml @@ -0,0 +1,12 @@ +Collections: + fstream1: {template: "case1.%y4%m2%d2.nc4", valid_range: "2007-09-22/2007-09-30"} + fstream2: {template: "case2.%y4%m2%d2.nc4", valid_range: "2007-10-01/2007-10-08"} + +Samplings: + s1: + time_interpolation: False + +Exports: + VAR1: + - {starting: "2007-09-22", variable: VAR1, collection: fstream1, sample: s1, fail_on_missing_file: false} + - {starting: "2007-10-01", variable: VAR1, collection: fstream2, sample: s1, fail_on_missing_file: false} diff --git a/Tests/ExtData_Testing_Framework/test_cases/extdata_2g_cases.txt b/Tests/ExtData_Testing_Framework/test_cases/extdata_2g_cases.txt index b79e4a5c9d29..68a05c4dddd2 100644 --- a/Tests/ExtData_Testing_Framework/test_cases/extdata_2g_cases.txt +++ b/Tests/ExtData_Testing_Framework/test_cases/extdata_2g_cases.txt @@ -34,3 +34,4 @@ case33 case34 case35 case36 +case37 diff --git a/gridcomps/ExtData2G/ExtDataBracket.F90 b/gridcomps/ExtData2G/ExtDataBracket.F90 index f46ee9273266..9fff7624bbb3 100644 --- a/gridcomps/ExtData2G/ExtDataBracket.F90 +++ b/gridcomps/ExtData2G/ExtDataBracket.F90 @@ -188,13 +188,8 @@ subroutine interpolate_to_time(this,field,time,rc) right_node_set = this%right_node%check_if_initialized(_RC) left_node_set = this%left_node%check_if_initialized(_RC) - write(*,*)'bmaa first check ',left_node_set,right_node_set,this%exact call ESMF_TimePrint(this%left_node%time,options='string',preString='left bracket time: ') call ESMF_TimePrint(this%right_node%time,options='string',preString='right bracket time: ') - !call this%right_node%get(file=right_file) - !call this%left_node%get(file=left_file) - !right_node_set = right_file /= file_not_found - !left_node_set = left_file /= file_not_found alpha = 0.0 if ( (.not.this%disable_interpolation) .and. (.not.this%intermittent_disable) .and. right_node_set .and. left_node_set) then @@ -209,7 +204,6 @@ subroutine interpolate_to_time(this,field,time,rc) if (left_node_set) then call assign_fptr(this%left_node%field,var1d_left,_RC) end if - write(*,*)'bmaa inter: ',left_node_set, right_node_set,this%new_file_left, this%new_file_right if ( left_node_set .and. (time == this%left_node%time .or. this%disable_interpolation)) then var1d = var1d_left else if (right_node_set .and. (time == this%right_node%time)) then @@ -223,7 +217,6 @@ subroutine interpolate_to_time(this,field,time,rc) end if if (this%exact .and. (.not.(time == this%left_node%time))) then - !write(*,*)'bmaa setting undef' var1d = mapl_undef end if @@ -250,14 +243,11 @@ subroutine swap_node_fields(this,rc) left_created = ESMF_FieldIsCreated(this%left_node%field,_RC) right_created = ESMF_FieldIsCreated(this%right_node%field,_RC) - write(*,*)'bmaa swapping nodes ',left_created,right_created left_created = ESMF_FieldIsCreated(this%left_node%field,_RC) if (left_created .and. right_created) then call assign_fptr(this%left_node%field,left_ptr,_RC) call assign_fptr(this%right_node%field,right_ptr,_RC) - write(*,*)'bmaa LR before: ',maxval(left_ptr),maxval(right_ptr) left_ptr = right_ptr - write(*,*)'bmaa LR after: ',maxval(left_ptr),maxval(right_ptr) end if _RETURN(_SUCCESS) end subroutine swap_node_fields From 8d71ed26125c43be16d9da0d5bf681b9a8c2e080 Mon Sep 17 00:00:00 2001 From: Benjamin Auer Date: Tue, 21 Jan 2025 13:51:13 -0500 Subject: [PATCH 3/3] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d2fdf3ce41b7..fa1e600a23b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Updated ExtData so that if files are missing in a sequence the last value will be perisisted if one has not chosen `exact` option - Changed MAPL_ESMFRegridder to require the dstMaskValues to be added as grid attribute to use fixed masking, fixes UFS issue - Increased formatting width of time index in ExtData2G diagnostic print - Updated GitHub checkout action to use blobless clones