diff --git a/ExternalLibs/Netcdf_4.4.1.1/Readme.txt b/ExternalLibs/Netcdf_4.4.1.1/Readme.txt index e7f5c7d3a..ffe0d7949 100644 --- a/ExternalLibs/Netcdf_4.4.1.1/Readme.txt +++ b/ExternalLibs/Netcdf_4.4.1.1/Readme.txt @@ -1,3 +1,5 @@ +(see for details: http://wiki.mohid.com/index.php?title=Compile/Build_MOHID) + NETCDF: - UNIDATA supports Windows support via CMake. Download and install Cmake [4]. Cmake is used to control the software compilation process using simple platform and compiler independent diff --git a/ExternalLibs/Netcdf_4.4.1.1/VS2015/x64/libifcoremd.dll b/ExternalLibs/Netcdf_4.4.1.1/VS2015/x64/libifcoremd.dll index bc7afd0a0..ce0c7e16a 100644 Binary files a/ExternalLibs/Netcdf_4.4.1.1/VS2015/x64/libifcoremd.dll and b/ExternalLibs/Netcdf_4.4.1.1/VS2015/x64/libifcoremd.dll differ diff --git a/ExternalLibs/Netcdf_4.4.1.1/VS2015/x64/libmmd.dll b/ExternalLibs/Netcdf_4.4.1.1/VS2015/x64/libmmd.dll index 679ab72a7..72eccde9f 100644 Binary files a/ExternalLibs/Netcdf_4.4.1.1/VS2015/x64/libmmd.dll and b/ExternalLibs/Netcdf_4.4.1.1/VS2015/x64/libmmd.dll differ diff --git a/ExternalLibs/NumericalRecipes/x64/NumericalRecipes.lib b/ExternalLibs/NumericalRecipes/x64/NumericalRecipes.lib index cfb2e427a..d263555ff 100644 Binary files a/ExternalLibs/NumericalRecipes/x64/NumericalRecipes.lib and b/ExternalLibs/NumericalRecipes/x64/NumericalRecipes.lib differ diff --git a/Software/DomainDecompositionConsolidation/ModuleDDC.F90 b/Software/DomainDecompositionConsolidation/ModuleDDC.F90 index 23e774c71..332ce2e68 100644 --- a/Software/DomainDecompositionConsolidation/ModuleDDC.F90 +++ b/Software/DomainDecompositionConsolidation/ModuleDDC.F90 @@ -682,6 +682,7 @@ recursive subroutine WriteConsolidatedHDF( IDOut, ObjHDF5_Out, GroupName, integer :: JUB integer :: KLB integer :: KUB + integer :: status !------------------------------------------------------------------------ @@ -754,9 +755,9 @@ recursive subroutine WriteConsolidatedHDF( IDOut, ObjHDF5_Out, GroupName, KUB = NULL_INT LimitsArray = NULL_INT - DomainSize = hash_getDomainSize(hash_map_in, FileArrayIn(i)) - WindowPosition = hash_getWindowPosition(hash_map_in, FileArrayIn(i)) - WindowFrame = hash_getWindowFrame(hash_map_in, FileArrayIn(i)) + status = hash_getDomainSize_f (hash_map_in, FileArrayIn(i),DomainSize ) + status = hash_getWindowPosition_f(hash_map_in, FileArrayIn(i),WindowPosition) + status = hash_getWindowFrame_f (hash_map_in, FileArrayIn(i),WindowFrame ) !Get Dataset Information call GetHDF5GroupID(HDF5ID = ObjHDF5_InArray(i), FatherGroupName = adjustl(trim(GroupName))//"/", & diff --git a/Software/DomainDecompositionConsolidation/ModuleHashTable.F90 b/Software/DomainDecompositionConsolidation/ModuleHashTable.F90 index e83904338..f83ba369a 100644 --- a/Software/DomainDecompositionConsolidation/ModuleHashTable.F90 +++ b/Software/DomainDecompositionConsolidation/ModuleHashTable.F90 @@ -36,14 +36,14 @@ MODULE ModuleHashTable PUBLIC :: hash_get_next_exists PUBLIC :: hash_get_next_key private :: hash_get_next_key2 - PUBLIC :: hash_getDomainSize - private :: hash_getDomainSize2 - PUBLIC :: hash_getWindowPosition - private :: hash_getWindowPosition2 + PUBLIC :: hash_getDomainSize_f + private :: hash_getDomainSize2_f + PUBLIC :: hash_getWindowPosition_f + private :: hash_getWindowPosition2_f PUBLIC :: hash_getObjID private :: hash_getObjID2 - PUBLIC :: hash_getWindowFrame - private :: hash_getWindowFrame2 + PUBLIC :: hash_getWindowFrame_f + private :: hash_getWindowFrame2_f PUBLIC :: hash_set private :: hash_set2 @@ -88,7 +88,6 @@ function hash_init() !Local------------------------------------------------------------------- type (T_HashTable), pointer :: NewObjHashTable - INTEGER :: status !------------------------------------------------------------------------ @@ -139,8 +138,6 @@ SUBROUTINE hash_set(Me, key, value_) INTEGER , INTENT(IN) :: value_ !Local------------------------------------------------------------------- - INTEGER :: local_index - LOGICAL :: found !------------------------------------------------------------------------ @@ -188,8 +185,6 @@ SUBROUTINE hash_setWindowPosition(Me, key, WindowPosition) INTEGER, dimension(4) , INTENT(IN) :: WindowPosition !Local------------------------------------------------------------------- - INTEGER :: local_index - LOGICAL :: found !------------------------------------------------------------------------ @@ -232,8 +227,6 @@ SUBROUTINE hash_setObjID(Me, key, ObjID) INTEGER, INTENT(IN) :: ObjID !Local------------------------------------------------------------------- - INTEGER :: local_index - LOGICAL :: found !------------------------------------------------------------------------ @@ -276,8 +269,6 @@ SUBROUTINE hash_setWindowFrame(Me, key, WindowFrame) INTEGER, dimension(4) , INTENT(IN) :: WindowFrame !Local------------------------------------------------------------------- - INTEGER :: local_index - LOGICAL :: found !------------------------------------------------------------------------ @@ -320,8 +311,6 @@ SUBROUTINE hash_setDomainSize(Me, key, DomainSize) INTEGER, dimension(4) , INTENT(IN) :: DomainSize !Local------------------------------------------------------------------- - INTEGER :: local_index - LOGICAL :: found !------------------------------------------------------------------------ @@ -399,103 +388,112 @@ recursive integer function hash_get2(HashList, key) END function hash_get2 !-------------------------------------------------------------------------- - function hash_getDomainSize(Me, key) + function hash_getDomainSize_f(Me, key,hash_getDomainSize) !Function---------------------------------------------------------------- - integer, dimension(4) :: hash_getDomainSize + integer :: hash_getDomainSize_f !External---------------------------------------------------------------- type (T_HashTable), pointer :: Me CHARACTER(*), INTENT(IN) :: key - + integer, dimension(4) :: hash_getDomainSize !------------------------------------------------------------------------ if2 : if (associated(Me%HashList)) then - hash_getDomainSize = hash_getDomainSize2(Me%HashList, key = key) + hash_getDomainSize_f = hash_getDomainSize2_f(Me%HashList, key = key, hash_getDomainSize2 = hash_getDomainSize) else if2 hash_getDomainSize =-1 * NOT_FOUND_ERR_ endif if2 !------------------------------------------------------------------------ - END function hash_getDomainSize + END function hash_getDomainSize_f !-------------------------------------------------------------------------- - recursive function hash_getDomainSize2(HashList, key) + recursive function hash_getDomainSize2_f(HashList, key, hash_getDomainSize2) !Function---------------------------------------------------------------- - integer, dimension(4) :: hash_getDomainSize2 + integer :: hash_getDomainSize2_f !External---------------------------------------------------------------- - type (T_HashList), pointer :: HashList + type (T_HashList), pointer, INTENT(IN) :: HashList CHARACTER(*), INTENT(IN) :: key + integer, dimension(4) :: hash_getDomainSize2 + + !Local------------------------------------------------------------------- + integer :: status !------------------------------------------------------------------------ if1 : if (adjustl(trim(HashList%key)) .EQ. adjustl(trim(key))) then hash_getDomainSize2 = HashList%DomainSize + hash_getDomainSize2_f = 0 else if1 if2 : if (associated(HashList%Next)) then - hash_getDomainSize2 = hash_getDomainSize2(HashList%Next, key = key) + status = hash_getDomainSize2_f(HashList%Next, key, hash_getDomainSize2) else if2 hash_getDomainSize2 =-1 * NOT_FOUND_ERR_ + hash_getDomainSize2_f = NOT_FOUND_ERR_ endif if2 endif if1 !------------------------------------------------------------------------ - END function hash_getDomainSize2 + END function hash_getDomainSize2_f !-------------------------------------------------------------------------- - function hash_getWindowPosition(Me, key) + function hash_getWindowPosition_f(Me, key,hash_getWindowPosition) !Function---------------------------------------------------------------- - integer, dimension(4) :: hash_getWindowPosition + integer :: hash_getWindowPosition_f !External---------------------------------------------------------------- type (T_HashTable), pointer :: Me CHARACTER(*), INTENT(IN) :: key - + integer, dimension(4) :: hash_getWindowPosition !------------------------------------------------------------------------ if2 : if (associated(Me%HashList)) then - hash_getWindowPosition = hash_getWindowPosition2(Me%HashList, key = key) + hash_getWindowPosition_f = hash_getWindowPosition2_f(Me%HashList, key = key, hash_getWindowPosition2 = hash_getWindowPosition) else if2 - hash_getWindowPosition =-1 * NOT_FOUND_ERR_ + hash_getWindowPosition = -1 * NOT_FOUND_ERR_ + hash_getWindowPosition_f = NOT_FOUND_ERR_ endif if2 !------------------------------------------------------------------------ - END function hash_getWindowPosition + END function hash_getWindowPosition_f !-------------------------------------------------------------------------- - recursive function hash_getWindowPosition2(HashList, key) + recursive function hash_getWindowPosition2_f(HashList, key,hash_getWindowPosition2) !Function---------------------------------------------------------------- - integer, dimension(4) :: hash_getWindowPosition2 + integer :: hash_getWindowPosition2_f !External---------------------------------------------------------------- type (T_HashList), pointer :: HashList CHARACTER(*), INTENT(IN) :: key - + integer, dimension(4) :: hash_getWindowPosition2 !------------------------------------------------------------------------ if1 : if (adjustl(trim(HashList%key)) .EQ. adjustl(trim(key))) then - hash_getWindowPosition2 = HashList%WindowPosition + hash_getWindowPosition2 = HashList%WindowPosition + hash_getWindowPosition2_f = 0 else if1 if2 : if (associated(HashList%Next)) then - hash_getWindowPosition2 = hash_getWindowPosition2(HashList%Next, key = key) + hash_getWindowPosition2_f = hash_getWindowPosition2_f(HashList%Next, key = key, hash_getWindowPosition2 = hash_getWindowPosition2) else if2 - hash_getWindowPosition2 =-1 * NOT_FOUND_ERR_ + hash_getWindowPosition2 = -1 * NOT_FOUND_ERR_ + hash_getWindowPosition2_f = NOT_FOUND_ERR_ endif if2 endif if1 !------------------------------------------------------------------------ - END function hash_getWindowPosition2 + END function hash_getWindowPosition2_f !-------------------------------------------------------------------------- @@ -543,53 +541,56 @@ END function hash_getObjID2 !-------------------------------------------------------------------------- - function hash_getWindowFrame(Me, key) + function hash_getWindowFrame_f(Me, key,hash_getWindowFrame) !Function---------------------------------------------------------------- - integer, dimension(4) :: hash_getWindowFrame + integer :: hash_getWindowFrame_f !External---------------------------------------------------------------- type (T_HashTable), pointer :: Me CHARACTER(*), INTENT(IN) :: key - + integer, dimension(4) :: hash_getWindowFrame !------------------------------------------------------------------------ if2 : if (associated(Me%HashList)) then - hash_getWindowFrame = hash_getWindowFrame2(Me%HashList, key = key) + hash_getWindowFrame_f = hash_getWindowFrame2_f(Me%HashList, key = key, hash_getWindowFrame2 = hash_getWindowFrame) else if2 - hash_getWindowFrame =-1 * NOT_FOUND_ERR_ + hash_getWindowFrame = -1 * NOT_FOUND_ERR_ + hash_getWindowFrame_f = NOT_FOUND_ERR_ endif if2 !------------------------------------------------------------------------ - END function hash_getWindowFrame + END function hash_getWindowFrame_f !-------------------------------------------------------------------------- - recursive function hash_getWindowFrame2(HashList, key) + recursive function hash_getWindowFrame2_f(HashList, key,hash_getWindowFrame2) !Function---------------------------------------------------------------- - integer, dimension(4) :: hash_getWindowFrame2 + integer :: hash_getWindowFrame2_f !External---------------------------------------------------------------- type (T_HashList), pointer :: HashList CHARACTER(*), INTENT(IN) :: key - + integer, dimension(4) :: hash_getWindowFrame2 !------------------------------------------------------------------------ if1 : if (adjustl(trim(HashList%key)) .EQ. adjustl(trim(key))) then - hash_getWindowFrame2 = HashList%WindowFrame + hash_getWindowFrame2 = HashList%WindowFrame + hash_getWindowFrame2_f = 0 else if1 if2 : if (associated(HashList%Next)) then - hash_getWindowFrame2 = hash_getWindowFrame2(HashList%Next, key = key) + hash_getWindowFrame2_f = hash_getWindowFrame2_f(HashList%Next, key = key, hash_getWindowFrame2 = hash_getWindowFrame2) else if2 - hash_getWindowFrame2 =-1 * NOT_FOUND_ERR_ + hash_getWindowFrame2 =-1 * NOT_FOUND_ERR_ + hash_getWindowFrame2_f = NOT_FOUND_ERR_ endif if2 endif if1 !------------------------------------------------------------------------ - END function hash_getWindowFrame2 + END function hash_getWindowFrame2_f !-------------------------------------------------------------------------- diff --git a/Software/HDF5Statistics/ModuleHDF5Statistics.F90 b/Software/HDF5Statistics/ModuleHDF5Statistics.F90 index e59800435..140630363 100644 --- a/Software/HDF5Statistics/ModuleHDF5Statistics.F90 +++ b/Software/HDF5Statistics/ModuleHDF5Statistics.F90 @@ -1195,7 +1195,7 @@ type(T_Time) function HDF5TimeInstant(Instant, ObjHDF5File) allocate(TimeVector(6)) - call HDF5ReadData (HDF5ID = ObjHDF5File%HDFID, & + call HDF5ReadWindow (HDF5ID = ObjHDF5File%HDFID, & GroupName = "/Time", & Name = "Time", & Array1D = TimeVector, & @@ -1721,10 +1721,19 @@ subroutine ConstructHDF5Grid stop 'ConstructHDF5Grid - ModuleHDF5Statistics - ERR30' !Get file dimensions - Me%WorkSize%ILB = 1 - Me%WorkSize%IUB = Dimensions(1) - Me%WorkSize%JLB = 1 - Me%WorkSize%JUB = Dimensions(2) + !if (Me%SubSetanalysisON) then + ! Me%WorkSize%ILB = ILBout + ! Me%WorkSize%IUB = IUBout + ! Me%WorkSize%JLB = JLBout + ! Me%WorkSize%JUB = JUBout + ! + !else + Me%WorkSize%ILB = 1 + Me%WorkSize%IUB = Dimensions(1) + Me%WorkSize%JLB = 1 + Me%WorkSize%JUB = Dimensions(2) + !endif + if (Me%File3D) then Me%WorkSize%KLB = 1 else @@ -1784,7 +1793,7 @@ subroutine ConstructHDF5Grid if (Me%ConnectionX%Exist) then - call HDF5ReadData(HDF5FileX%HDFID, "/Grid", & + call HDF5ReadWindow(HDF5FileX%HDFID, "/Grid", & trim(Me%ConnectionX%Name), & Array2D = Me%ConnectionX%RealValues2D, & STAT = STAT_CALL) @@ -1803,7 +1812,7 @@ subroutine ConstructHDF5Grid if (Me%ConnectionY%Exist) then - call HDF5ReadData(HDF5FileX%HDFID, "/Grid", & + call HDF5ReadWindow(HDF5FileX%HDFID, "/Grid", & trim(Me%ConnectionY%Name), & Array2D = Me%ConnectionY%RealValues2D, & STAT = STAT_CALL) @@ -1812,14 +1821,14 @@ subroutine ConstructHDF5Grid endif - call HDF5ReadData(HDF5FileX%HDFID, "/Grid", & + call HDF5ReadWindow(HDF5FileX%HDFID, "/Grid", & trim(Me%Latitude%Name), & Array2D = Me%Latitude%RealValues2D, & STAT = STAT_CALL) if (STAT_CALL .NE. SUCCESS_) & stop 'ConstructHDF5Grid - ModuleHDF5Statistics - ERR90' - call HDF5ReadData(HDF5FileX%HDFID, "/Grid", & + call HDF5ReadWindow(HDF5FileX%HDFID, "/Grid", & trim(Me%Longitude%Name), & Array2D = Me%Longitude%RealValues2D, & STAT = STAT_CALL) @@ -1833,7 +1842,7 @@ subroutine ConstructHDF5Grid if (STAT_CALL .NE. SUCCESS_) & stop 'ConstructHDF5Grid - ModuleHDF5Statistics - ERR110' - call HDF5ReadData(HDF5FileX%HDFID, "/Grid", & + call HDF5ReadWindow(HDF5FileX%HDFID, "/Grid", & trim(Me%Bathymetry%Name), & Array2D = Me%Bathymetry%RealValues2D, & STAT = STAT_CALL) @@ -1850,7 +1859,7 @@ subroutine ConstructHDF5Grid if (STAT_CALL .NE. SUCCESS_) & stop 'ConstructHDF5Grid - ModuleHDF5Statistics - ERR130' - call HDF5ReadData(HDF5FileX%HDFID, "/Grid", & + call HDF5ReadWindow(HDF5FileX%HDFID, "/Grid", & trim(Me%Mapping%Name), & Array3D = Me%Mapping%IntegerValues3D, & STAT = STAT_CALL) @@ -1885,9 +1894,10 @@ subroutine ConstructHDF5Grid endif - call HDF5ReadData(HDF5FileX%HDFID, "/Grid/VerticalZ", & + call HDF5ReadWindow(HDF5FileX%HDFID, "/Grid/VerticalZ", & "Vertical_00001", & Array3D = VerticalZ, & + OffSet3 = 0, & STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) then @@ -1953,7 +1963,7 @@ subroutine ConstructHDF5Grid else - call HDF5ReadData(HDF5FileX%HDFID, "/Grid", & + call HDF5ReadWindow(HDF5FileX%HDFID, "/Grid", & trim(Me%Mapping%Name), & Array2D = Me%Mapping%IntegerValues2D, & STAT = STAT_CALL) @@ -2360,7 +2370,7 @@ subroutine ReadParameterFields(ObjHDF5File, ObjParameter) stop 'ReadParameterFields - ModuleHDF5Statistics - ERR02' !read field - call HDF5ReadData(ObjHDF5File%HDFID, ObjParameter%Group, & + call HDF5ReadWindow(ObjHDF5File%HDFID, ObjParameter%Group, & trim(NewField%Name), & Array2D = NewField%Values2D, & STAT = STAT_CALL) @@ -2384,7 +2394,7 @@ subroutine ReadParameterFields(ObjHDF5File, ObjParameter) stop 'ReadParameterFields - ModuleHDF5Statistics - ERR04' !read field - call HDF5ReadData(ObjHDF5File%HDFID, ObjParameter%Group, & + call HDF5ReadWindow(ObjHDF5File%HDFID, ObjParameter%Group, & trim(NewField%Name), & Array3D = NewField%Values3D, & STAT = STAT_CALL) diff --git a/Software/MOHIDBase1/ModuleDischarges.F90 b/Software/MOHIDBase1/ModuleDischarges.F90 index c2ce6a69c..c5cc713d5 100644 --- a/Software/MOHIDBase1/ModuleDischarges.F90 +++ b/Software/MOHIDBase1/ModuleDischarges.F90 @@ -137,6 +137,7 @@ Module ModuleDischarges integer, parameter :: FlowOver = 2 integer, parameter :: Valve = 3 integer, parameter :: OpenMILink = 4 + integer, parameter :: RatingCurve = 5 !Valve side integer, parameter :: SideA = 1 @@ -202,6 +203,12 @@ Module ModuleDischarges real :: CrestHeigth = null_real end type T_FlowOver + type T_RatingCurve + real, dimension(:), pointer :: Level + real, dimension(:), pointer :: Flow + integer :: nValues + end type T_RatingCurve + type T_Valve integer :: SectionType = null_int real :: Diameter = null_real @@ -302,6 +309,7 @@ Module ModuleDischarges integer :: DischargeType = null_int type(T_Valve ) :: Valve type(T_FlowOver) :: FlowOver + type(T_RatingCurve) :: RatingCurve type(T_Property ), pointer :: FirstProperty => null() type(T_Property ), pointer :: LastProperty => null() type(T_Property ), pointer :: CurrProperty => null() @@ -588,7 +596,7 @@ subroutine Construct_Discharge(NewDischarge, IDnumber, ClientNumber) call Read_DataBaseFile (NewDischarge) !Construct Discharge Flow values - call Construct_FlowValues (NewDischarge) + call Construct_FlowValues (NewDischarge, ClientNumber) !Construct Discharge Velocity values call Construct_VelocityValues (NewDischarge) @@ -1160,14 +1168,22 @@ end subroutine Read_DataBaseFile !-------------------------------------------------------------------------- - subroutine Construct_FlowValues(NewDischarge) + subroutine Construct_FlowValues(NewDischarge, ClientNumber) !Arguments-------------------------------------------------------------- type(T_IndividualDischarge), pointer :: NewDischarge + integer :: ClientNumber !Local----------------------------------------------------------------- integer :: flag, STAT_CALL - + character(len = StringLength), parameter :: beginratingcurve = '<>' + character(len = StringLength), parameter :: endratingcurve = '<>' + real, dimension(:), pointer :: BufferLine + logical :: BlockLayersFound + integer :: FirstLine, LastLine + integer :: iValue, iLine + + !---------------------------------------------------------------------- @@ -1231,10 +1247,11 @@ subroutine Construct_FlowValues(NewDischarge) STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'Construct_FlowValues - ModuleDischarges - ERR30' - if (NewDischarge%DischargeType /= Normal .and. & - NewDischarge%DischargeType /= FlowOver .and. & - NewDischarge%DischargeType /= Valve .and. & - NewDischarge%DischargeType /= OpenMILink) then + if (NewDischarge%DischargeType /= Normal .and. & + NewDischarge%DischargeType /= FlowOver .and. & + NewDischarge%DischargeType /= Valve .and. & + NewDischarge%DischargeType /= OpenMILink .and. & + NewDischarge%DischargeType /= RatingCurve) then stop 'Construct_FlowValues - ModuleDischarges - ERR40' endif @@ -1429,6 +1446,52 @@ subroutine Construct_FlowValues(NewDischarge) stop 'Construct_FlowValues - ModuleDischarges - ERR138' endif + else if (NewDischarge%DischargeType == RatingCurve) then i2 + + !Get Block with rating curves values + call ExtractBlockFromBlock(Me%ObjEnterData, ClientNumber, & + beginratingcurve, endratingcurve, & + BlockLayersFound, & + FirstLine = FirstLine, & + LastLine = LastLine, & + STAT = STAT_CALL) + +cd1 : if (STAT_CALL .EQ. SUCCESS_ .and. BlockLayersFound) then + + + allocate(NewDischarge%RatingCurve%Level(LastLine - FirstLine -1)) + allocate(NewDischarge%RatingCurve%Flow(LastLine - FirstLine -1)) + NewDischarge%RatingCurve%nValues = LastLine - FirstLine -1 + allocate(BufferLine(2)) + + iValue = 1; + do iLine = FirstLine+1, LastLine-1 + + call GetData(BufferLine, & + Me%ObjEnterData, & + flag, & + Buffer_Line = iLine, & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_ .or. flag /= 2) & + stop "Read Rating Curve Values - ModuleDischarges - ERR139" + + NewDischarge%RatingCurve%Level(iValue) = BufferLine (1) + NewDischarge%RatingCurve%Flow(iValue) = BufferLine (2) + + iValue = iValue + 1 + + enddo + + deallocate (BufferLine) + + else + + stop "Read Rating Curve Values - ModuleDischarges - ERR140" + + endif cd1 + + + endif i2 call GetData(NewDischarge%ByPass%ON, & @@ -2247,11 +2310,11 @@ subroutine GetDischargesGridLocalization(DischargesID, DischargeIDNumber, Igrid, stop 'Subroutine GetDischargesGridLocalization - ModuleDischarges. ERR01.' endif - if (.not. DischargeX%Localization%Location2D) then - write(*,*)'Discharge location not given in Grid Coordinates' - write(*,*)trim(adjustl(DischargeX%ID%Name)) - stop 'GetDischargesGridLocalization - ModuleDischarges - ERR01a' - endif + !if (.not. DischargeX%Localization%Location2D) then + ! write(*,*)'Discharge location not given in Grid Coordinates' + ! write(*,*)trim(adjustl(DischargeX%ID%Name)) + ! stop 'GetDischargesGridLocalization - ModuleDischarges - ERR01a' + !endif if (DischargeX%Localization%VariableX .and. present(TimeX)) then DischargeX%Localization%CoordinateX = & @@ -2847,11 +2910,14 @@ subroutine GetDischargesNodeID (DischargesID, DischargeIDNumber, NodeID, STAT) stop 'GetDischargesNodeID - ModuleDischarges - ERR01' endif - if (DischargeX%Localization%Location2D) then - write(*,*)'Discharge location not given as Node ID' - write(*,*)trim(adjustl(DischargeX%ID%Name)) - stop 'GetDischargesNodeID - ModuleDischarges - ERR01a' - endif + !Code below does not makes sense for drainage network. + !If you want to impose discharge in Drainage Network and RunOff the code will not allow you to run. + !Can be deleted in 2019 - Frank + !if (DischargeX%Localization%Location2D) then + ! write(*,*)'Discharge location not given as Node ID' + ! write(*,*)trim(adjustl(DischargeX%ID%Name)) + ! stop 'GetDischargesNodeID - ModuleDischarges - ERR01a' + !endif NodeID = DischargeX%Localization%NodeID @@ -3256,6 +3322,8 @@ subroutine GetDischargeWaterFlow(DischargesID, TimeX, DischargeIDNumber, real :: UpstreamH, DownstreamH, FlowDir real :: D, TopValveH, BottomValveH, Haux, Theta real :: PipeFriction, P, Rh + real :: dQ1, dQ2 + integer :: iAux !---------------------------------------------------------------------- STAT_ = UNKNOWN_ @@ -3322,6 +3390,35 @@ subroutine GetDischargeWaterFlow(DischargesID, TimeX, DischargeIDNumber, if (DischargeX%ByPass%ON .and. DischargeX%ByPass%Side == SideB) then Flow = - Flow endif + + elseif (DischargeX%DischargeType == RatingCurve) then + + + if (SurfaceElevation < DischargeX%RatingCurve%Level(1)) then + Flow = 0.0 + else if (SurfaceElevation > DischargeX%RatingCurve%Level(DischargeX%RatingCurve%nValues)) then + Flow = -1.0 * DischargeX%RatingCurve%Flow(DischargeX%RatingCurve%nValues) + else + + iAux = 2 + do while (SurfaceElevation >= DischargeX%RatingCurve%Level(iAux)) + iAux = iAux + 1 + enddo + + + dQ1 = SurfaceElevation - DischargeX%RatingCurve%Level(iAux-1) + dQ2 = DischargeX%RatingCurve%Level(iAux) - SurfaceElevation + + Flow = -1.0 * (dQ1 * DischargeX%RatingCurve%Flow(iAux) + & + dQ2 * DischargeX%RatingCurve%Flow(iAux-1) ) / & + (DischargeX%RatingCurve%Level(iAux) - & + DischargeX%RatingCurve%Level(iAux-1)) + + endif + + + + elseif (DischargeX%DischargeType == Valve) then diff --git a/Software/MOHIDBase1/ModuleDrainageNetwork.F90 b/Software/MOHIDBase1/ModuleDrainageNetwork.F90 index c221fd4b1..6bd63d8b7 100644 --- a/Software/MOHIDBase1/ModuleDrainageNetwork.F90 +++ b/Software/MOHIDBase1/ModuleDrainageNetwork.F90 @@ -131,6 +131,9 @@ ! N_STATIONS : integer - !number os stations that define the cross section ! STATION : real real ... - !station values ! ELEVATION/LEVEL : real real ... - !elevation values +! 4 - Culvert +! INVERT_LEVEL : real - !Invert Level of the Culvert +! DIAMETER : real ! ! ! ID : int - !Reach ID Number @@ -382,7 +385,13 @@ Module ModuleDrainageNetwork integer, parameter :: Trapezoidal = 1 integer, parameter :: TrapezoidalFlood = 2 integer, parameter :: Tabular = 3 + integer, parameter :: Culvert = 4 + + !Culvert - section type + integer, parameter :: circular_area = 1 + integer, parameter :: rectangular_area = 2 + !DownstreamBoundary integer, parameter :: Dam = 0 integer, parameter :: ZeroDepthGradient = 1 @@ -553,6 +562,7 @@ Module ModuleDrainageNetwork integer :: ObjEnterDataInitial = 0 end type T_Files + type T_CrossSection integer :: Form = null_int real :: BottomWidth = null_real @@ -582,6 +592,12 @@ Module ModuleDrainageNetwork real, dimension(:), pointer :: LevelVerticalArea => null() !length NLevels real, dimension(:), pointer :: LevelWetPerimeter => null() !length NLevels real, dimension(:), pointer :: LevelSurfaceWidth => null() !length NLevels + + !Culvert + integer :: CulvertSectionType = null_int + real :: CulvertDiameter = null_real + real :: CulvertHeight = null_real + real :: CulvertWidth = null_real end type T_CrossSection @@ -612,8 +628,13 @@ Module ModuleDrainageNetwork real :: SurfaceArea = null_real real :: SurfaceWidth = null_real logical :: HasGrid = .FALSE. + logical :: HasTwoGridPoints = .FALSE. integer :: GridI = null_int integer :: GridJ = null_int + integer :: LeftGridI = null_int + integer :: LeftGridJ = null_int + integer :: RightGridI = null_int + integer :: RightGridJ = null_int integer :: nUpstreamReaches = 0 integer :: nDownstreamReaches = 0 integer :: Order = null_int @@ -622,7 +643,7 @@ Module ModuleDrainageNetwork logical :: TimeSerie = .FALSE. character(LEN = StringLength) :: TimeSerieName = '' logical :: Discharges = .FALSE. - type (T_CrossSection) :: CrossSection + type (T_CrossSection) :: CrossSection character(len=StringLength) :: StationName = '' real :: SingCoef = 1.0 type(T_MaxValues) :: Max @@ -936,6 +957,7 @@ Module ModuleDrainageNetwork integer :: HighestOrder = 0 logical :: CheckNodes = .false. logical :: CheckReaches = .false. + logical :: CorrectBanks = .false. integer :: XSCalc = null_int logical :: HasGrid = .true. integer :: CoordType = null_int @@ -969,6 +991,8 @@ Module ModuleDrainageNetwork logical :: AllowBackwardWater = .false. real :: MinimumSlope = null_real real :: InitialWaterDepth = null_real + real :: InitialWaterLevel = null_real + logical :: InitialWaterLevelON = .false. real :: MinimumWaterDepth = null_real real :: MinimumWaterDepthProcess = null_real real :: MinimumWaterDepthAdvection = null_real @@ -1468,7 +1492,16 @@ subroutine ReadDataFile SearchType = FromFile, & Default = .true., & STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ModuleDrainageNetwork - ReadDataFile - ERR07' + if (STAT_CALL /= SUCCESS_) stop 'ModuleDrainageNetwork - ReadDataFile - ERR07' + + call GetData(Me%CorrectBanks, & + Me%ObjEnterData, flag, & + keyword = 'CORRECT_BANKS', & + ClientModule = 'DrainageNetwork', & + SearchType = FromFile, & + Default = .true., & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ModuleDrainageNetwork - ReadDataFile - ERR07a' call GetData(Me%ComputeOptions%Discharges, & Me%ObjEnterData, flag, & @@ -1665,6 +1698,19 @@ subroutine ReadDataFile write (*,*)'Invalid Number of Initial Water Level [INITIAL_WATER_DEPTH]' stop 'ModuleDrainageNetwork - ReadDataFile - ERR21' end if + + call GetData(Me%InitialWaterLevel, & + Me%ObjEnterData, flag, & + keyword = 'INITIAL_WATER_LEVEL', & + ClientModule = 'DrainageNetwork', & + SearchType = FromFile, & + Default = 0.0, & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ModuleDrainageNetwork - ReadDataFile - ERR21' + + if(flag == 1)then + Me%InitialWaterLevelON = .true. + endif end if @@ -2031,7 +2077,7 @@ subroutine ReadDataFile flag, & SearchType = FromFile, & keyword = 'RESTART_FILE_FORMAT', & - Default = BIN_, & + Default = HDF_, & ClientModule = 'ModuleDrainageNetwork', & STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleDrainageNetwork - ERR48.5' @@ -2778,8 +2824,6 @@ subroutine ConstructNode (NodePos) integer :: flag, NStations real, dimension (2) :: AuxCoord logical :: ComputeElevation - real :: heightDif - character (len = StringLength) :: AuxString !Local------------------------------------------------------------------ @@ -2832,47 +2876,86 @@ subroutine ConstructNode (NodePos) stop 'ModuleDrainageNetwork - ConstructNode - ERR05' end if - !Gets associated Grid Point I - call GetData(NewNode%GridI, & - Me%Files%ObjEnterDataNetwork, flag, & - keyword = 'GRID_I', & - ClientModule = 'DrainageNetwork', & - SearchType = FromBlock, & - default = null_int, & - STAT = STAT_CALL) - if (STAT_CALL .NE. SUCCESS_) stop 'ModuleDrainageNetwork - ConstructNode - ERR06' - - !Gets associated Grid Point J - call GetData(NewNode%GridJ, & - Me%Files%ObjEnterDataNetwork, flag, & - keyword = 'GRID_J', & - ClientModule = 'DrainageNetwork', & - SearchType = FromBlock, & - default = null_int, & - STAT = STAT_CALL) - if (STAT_CALL .NE. SUCCESS_) stop 'ModuleDrainageNetwork - ConstructNode - ERR07' - if(NewNode%GridI .ne. null_int .AND. NewNode%GridJ .ne. null_int)then - NewNode%HasGrid = .TRUE. - endif + if (Me%HasGrid) then - if(.not. Me%HasGrid)then - NewNode%HasGrid = .FALSE. - endif + !Gets associated Grid Point I + call GetData(NewNode%GridI, & + Me%Files%ObjEnterDataNetwork, flag, & + keyword = 'GRID_I', & + ClientModule = 'DrainageNetwork', & + SearchType = FromBlock, & + default = null_int, & + STAT = STAT_CALL) + if (STAT_CALL .NE. SUCCESS_) stop 'ModuleDrainageNetwork - ConstructNode - ERR06' + + !Gets associated Grid Point J + call GetData(NewNode%GridJ, & + Me%Files%ObjEnterDataNetwork, flag, & + keyword = 'GRID_J', & + ClientModule = 'DrainageNetwork', & + SearchType = FromBlock, & + default = null_int, & + STAT = STAT_CALL) + if (STAT_CALL .NE. SUCCESS_) stop 'ModuleDrainageNetwork - ConstructNode - ERR07' + if(NewNode%GridI .ne. null_int .AND. NewNode%GridJ .ne. null_int) then + NewNode%HasGrid = .TRUE. + endif + + + !I Left Bank + call GetData(NewNode%LeftGridI, & + Me%Files%ObjEnterDataNetwork, flag, & + keyword = 'LEFT_GRID_I', & + ClientModule = 'DrainageNetwork', & + SearchType = FromBlock, & + default = null_int, & + STAT = STAT_CALL) + if (STAT_CALL .NE. SUCCESS_) & + stop 'ModuleDrainageNetwork - ConstructNode - ERR60b' + + !J Left Bank + call GetData(NewNode%LeftGridJ, & + Me%Files%ObjEnterDataNetwork, flag, & + keyword = 'LEFT_GRID_J', & + ClientModule = 'DrainageNetwork', & + default = null_int, & + SearchType = FromBlock, & + STAT = STAT_CALL) + if (STAT_CALL .NE. SUCCESS_) & + stop 'ModuleDrainageNetwork - ConstructNode - ERR60c' + + !I Right Bank + call GetData(NewNode%RightGridI, & + Me%Files%ObjEnterDataNetwork, flag, & + keyword = 'RIGHT_GRID_I', & + ClientModule = 'DrainageNetwork', & + default = null_int, & + SearchType = FromBlock, & + STAT = STAT_CALL) + if (STAT_CALL .NE. SUCCESS_ ) & + stop 'ModuleDrainageNetwork - ConstructNode - ERR60d' + + !J Left Bank + call GetData(NewNode%RightGridJ, & + Me%Files%ObjEnterDataNetwork, flag, & + keyword = 'RIGHT_GRID_J', & + ClientModule = 'DrainageNetwork', & + default = null_int, & + SearchType = FromBlock, & + STAT = STAT_CALL) + if (STAT_CALL .NE. SUCCESS_) & + stop 'ModuleDrainageNetwork - ConstructNode - ERR60e' - !TerrainLevel (before InitializeTabularCrossSection) - call GetData(NewNode%CrossSection%TerrainLevel, & - Me%Files%ObjEnterDataNetwork, flag, & - keyword = 'TERRAIN_LEVEL', & - ClientModule = 'DrainageNetwork', & - SearchType = FromBlock, & - STAT = STAT_CALL) - if (STAT_CALL .NE. SUCCESS_) stop 'ModuleDrainageNetwork - ConstructNode - ERR08' - if (flag /= 1) then - write (*,*)'Invalid Node Terrain Level [TERRAIN_LEVEL]' - stop 'ModuleDrainageNetwork - ConstructNode - ERR21' - endif + if(NewNode%LeftGridI .ne. null_int .AND. NewNode%LeftGridJ .ne. null_int .AND. & + NewNode%RightGridI .ne. null_int .AND. NewNode%RightGridJ .ne. null_int ) then + + NewNode%HasTwoGridPoints = .TRUE. + + endif + + endif !Singularity Coef - % available vertical area = 1 - % reduction Av by singularity call GetData(NewNode%SingCoef, & @@ -2947,30 +3030,51 @@ subroutine ConstructNode (NodePos) stop 'ModuleDrainageNetwork - ConstructNode - ERR12a' endif + if (.not. NewNode%HasGrid) then + call GetData(NewNode%CrossSection%TerrainLevel, & + Me%Files%ObjEnterDataNetwork, flag, & + keyword = 'TERRAIN_LEVEL', & + ClientModule = 'DrainageNetwork', & + SearchType = FromBlock, & + STAT = STAT_CALL) + if (STAT_CALL .NE. SUCCESS_) stop 'ModuleDrainageNetwork - ConstructNode - ERR08' + if (flag /= 1) then + write (*,*)'Invalid Node Terrain Level [TERRAIN_LEVEL]' + stop 'ModuleDrainageNetwork - ConstructNode - ERR21' + endif + endif + + ! + !Commented logic below. Now the Node has either: + ! - a given terrain level if we run without DTM or if the node lies outside the DTM + ! - the terrain level from the DTM. + !if DN was imposed over DTM (if associated(Me%ExtVar%Topography)) !meaning that drainage network may have been built from DTM different than currently used (e.g. with depressions removed), !need to check terrain level and height to be consistent with DTM used if (associated(Me%ExtVar%Topography) .AND. NewNode%HasGrid) then - - if (Me%ExtVar%Topography(NewNode%GridI, NewNode%GridJ) /= NewNode%CrossSection%TerrainLevel) then - - heightDif = Me%ExtVar%Topography(NewNode%GridI, NewNode%GridJ) - NewNode%CrossSection%TerrainLevel - - NewNode%CrossSection%TerrainLevel = Me%ExtVar%Topography(NewNode%GridI, NewNode%GridJ) - NewNode%CrossSection%Height = NewNode%CrossSection%Height + heightDif - - if (NewNode%CrossSection%Height < 0) then - write(*,*)'Negative node cross section height after Topography check' - write(*,*)'in node ', NewNode%ID - stop 'ModuleDrainageNetwork - ConstructNode - ERR12b' - endif - - Me%ChangedNodes = .true. - write(AuxString,*) 'Forcing river points from DN, Node changed to fit DTM ', NewNode%ID - call SetError (WARNING_, INTERNAL_, AuxString , OFF) - - endif - endif + NewNode%CrossSection%TerrainLevel = Me%ExtVar%Topography(NewNode%GridI, NewNode%GridJ) + endif + ! + ! if (Me%ExtVar%Topography(NewNode%GridI, NewNode%GridJ) /= NewNode%CrossSection%TerrainLevel) then + ! + ! heightDif = Me%ExtVar%Topography(NewNode%GridI, NewNode%GridJ) - NewNode%CrossSection%TerrainLevel + ! + ! NewNode%CrossSection%TerrainLevel = Me%ExtVar%Topography(NewNode%GridI, NewNode%GridJ) + ! NewNode%CrossSection%Height = NewNode%CrossSection%Height + heightDif + ! + ! if (NewNode%CrossSection%Height < 0) then + ! write(*,*)'Negative node cross section height after Topography check' + ! write(*,*)'in node ', NewNode%ID + ! stop 'ModuleDrainageNetwork - ConstructNode - ERR12b' + ! endif + ! + ! Me%ChangedNodes = .true. + ! write(AuxString,*) 'Forcing river points from DN, Node changed to fit DTM ', NewNode%ID + ! call SetError (WARNING_, INTERNAL_, AuxString , OFF) + ! + ! endif + !endif NewNode%CrossSection%Slope = (( NewNode%CrossSection%TopWidth & - NewNode%CrossSection%BottomWidth ) & @@ -3102,17 +3206,75 @@ subroutine ConstructNode (NodePos) endif - call GetData(NewNode%CrossSection%CorrectBanks, & - Me%Files%ObjEnterDataNetwork, flag, & - keyword = 'CORRECT_BANKS', & - ClientModule = 'DrainageNetwork', & - SearchType = FromBlock, & - Default = OFF, & - STAT = STAT_CALL) - if (STAT_CALL .NE. SUCCESS_) stop 'ModuleDrainageNetwork - ConstructNode - ERR17' + call InitializeTabularCrossSection(NewNode, ComputeElevation) + elseif (NewNode%CrossSection%Form == Culvert) then !ifXS + + call GetData(NewNode%CrossSection%CulvertSectionType, & + Me%Files%ObjEnterDataNetwork, flag, & + keyword = 'CULVERT_SECTION_TYPE', & + ClientModule = 'DrainageNetwork', & + SearchType = FromBlock, & + Default = circular_area, & + STAT = STAT_CALL) + if (STAT_CALL .NE. SUCCESS_) stop 'ModuleDrainageNetwork - ConstructNode - ERR18' + + call GetData(NewNode%CrossSection%BottomLevel, & + Me%Files%ObjEnterDataNetwork, flag, & + keyword = 'CULVERT_INVERT_LEVEL', & + ClientModule = 'DrainageNetwork', & + SearchType = FromBlock, & + STAT = STAT_CALL) + if (STAT_CALL .NE. SUCCESS_) stop 'ModuleDrainageNetwork - ConstructNode - ERR18' + if (flag /= 1) then + write(*,*) 'Invalid Node Culvert Invert Level [CULVERT_INVERT_LEVEL]' + stop 'ModuleDrainageNetwork - ConstructNode - ERR17a' + end if + + + if (NewNode%CrossSection%CulvertSectionType == circular_area) then + + call GetData(NewNode%CrossSection%CulvertDiameter, & + Me%Files%ObjEnterDataNetwork, flag, & + keyword = 'CULVERT_DIAMETER', & + ClientModule = 'DrainageNetwork', & + SearchType = FromBlock, & + STAT = STAT_CALL) + if (STAT_CALL .NE. SUCCESS_) stop 'ModuleDrainageNetwork - ConstructNode - ERR18a' + if (flag /= 1) then + write(*,*) 'Invalid Node Culvert Diameter [CULVERT_DIAMETER]' + stop 'ModuleDrainageNetwork - ConstructNode - ERR17a' + end if + + else + + call GetData(NewNode%CrossSection%CulvertHeight, & + Me%Files%ObjEnterDataNetwork, flag, & + keyword = 'CULVERT_HEIGHT', & + ClientModule = 'DrainageNetwork', & + SearchType = FromBlock, & + STAT = STAT_CALL) + if (STAT_CALL .NE. SUCCESS_) stop 'ModuleDrainageNetwork - ConstructNode - ERR18a' + if (flag /= 1) then + write(*,*) 'Invalid Node Culvert Diameter [CULVERT_DIAMETER]' + stop 'ModuleDrainageNetwork - ConstructNode - ERR17a' + end if + + call GetData(NewNode%CrossSection%CulvertWidth, & + Me%Files%ObjEnterDataNetwork, flag, & + keyword = 'CULVERT_WIDTH', & + ClientModule = 'DrainageNetwork', & + SearchType = FromBlock, & + STAT = STAT_CALL) + if (STAT_CALL .NE. SUCCESS_) stop 'ModuleDrainageNetwork - ConstructNode - ERR18a' + if (flag /= 1) then + write(*,*) 'Invalid Node Culvert Diameter [CULVERT_DIAMETER]' + stop 'ModuleDrainageNetwork - ConstructNode - ERR17a' + end if + + + endif - call InitializeTabularCrossSection(NewNode, ComputeElevation) else !ifXS @@ -3121,6 +3283,8 @@ subroutine ConstructNode (NodePos) end if ifXS + + !Pool Depth call GetData(NewNode%CrossSection%PoolDepth, & Me%Files%ObjEnterDataNetwork, flag, & @@ -3218,7 +3382,6 @@ subroutine WriteNewDrainageNetwork() write (unit, *)"GRID_I : ", CurrNode%GridI write (unit, *)"GRID_J : ", CurrNode%GridJ write (unit, *)"CROSS_SECTION_TYPE : ", CurrNode%CrossSection%Form - write (unit, *)"TERRAIN_LEVEL : ", CurrNode%CrossSection%TerrainLevel write (unit, *)"BOTTOM_LEVEL : ", CurrNode%CrossSection%BottomLevel if (CurrNode%CrossSection%Form == Trapezoidal .or. & @@ -3226,6 +3389,7 @@ subroutine WriteNewDrainageNetwork() write (unit, *)"BOTTOM_WIDTH : ", CurrNode%CrossSection%BottomWidth write (unit, *)"TOP_WIDTH : ", CurrNode%CrossSection%TopWidth write (unit, *)"HEIGHT : ", CurrNode%CrossSection%Height + write (unit, *)"TERRAIN_LEVEL : ", CurrNode%CrossSection%TerrainLevel if (CurrNode%CrossSection%Form == TrapezoidalFlood) then write (unit, *)"MIDDLE_WIDTH : ", CurrNode%CrossSection%MiddleWidth @@ -3236,6 +3400,18 @@ subroutine WriteNewDrainageNetwork() write (unit, *)"N_STATIONS : ", CurrNode%CrossSection%NStations write (unit, *)"STATION : ", (CurrNode%CrossSection%Station(i), i=1, CurrNode%CrossSection%NStations) write (unit, *)"ELEVATION : ", (CurrNode%CrossSection%Elevation(i), i=1, CurrNode%CrossSection%NStations) + + elseif (CurrNode%CrossSection%Form == Culvert) then + write (unit, *)"CULVERT_SECTION_TYPE : ", CurrNode%CrossSection%CulvertSectionType + + + if (CurrNode%CrossSection%CulvertSectionType == circular_area) then + write (unit, *)"CULVERT_DIAMETER : ", CurrNode%CrossSection%CulvertDiameter + else + write (unit, *)"CULVERT_HEIGHT : ", CurrNode%CrossSection%CulvertHeight + write (unit, *)"CULVERT_WIDTH : ", CurrNode%CrossSection%CulvertWidth + endif + endif if (CurrNode%CrossSection%PoolDepth > 0.0) then @@ -3329,7 +3505,7 @@ subroutine InitializeTabularCrossSection (CurrNode, ComputeElevation) do i=1,IBL-1 if (Elevation(i+1)-Elevation(i) > 0) then write(*,*) 'Left bank elevations must decrease in Node ', CurrNode%ID - if(CurrNode%CrossSection%CorrectBanks)then + if(Me%CorrectBanks)then write(*,*)"Elevation at station", i, " changed from ", Elevation(i+1), " to ", Elevation(i) Elevation(i+1) = Elevation(i) else @@ -3341,7 +3517,7 @@ subroutine InitializeTabularCrossSection (CurrNode, ComputeElevation) do i=IBL,N-1 if (Elevation(i+1)-Elevation(i) < 0) then write(*,*) 'Right bank elevations must increase in Node ', CurrNode%ID - if(CurrNode%CrossSection%CorrectBanks)then + if(Me%CorrectBanks)then write(*,*)"Elevation at station", i, " changed from ", Elevation(i+1), " to ", Elevation(i) Elevation(i+1) = Elevation(i) else @@ -3854,6 +4030,19 @@ subroutine ConstructReach (ReachPos) stop 'ModuleDrainageNetwork - ConstructReach - ERR02' endif + !Gets Length + call GetData(NewReach%Length, & + Me%Files%ObjEnterDataNetwork, flag, & + keyword = 'LENGTH', & + ClientModule = 'DrainageNetwork', & + SearchType = FromBlock, & + STAT = STAT_CALL) + if (STAT_CALL .NE. SUCCESS_) stop 'ModuleDrainageNetwork - ConstructReach - ERR02' + if (flag /= 1) then + NewReach%Length = null_real + endif + + call FindNodePosition (DownNodeID, NewReach%DownstreamNode, Found) if (.NOT.Found) then @@ -4095,11 +4284,14 @@ subroutine CalculateReaches DownstreamNode => Me%Nodes (CurrReach%DownstreamNode) UpstreamNode => Me%Nodes (CurrReach%UpstreamNode ) - if (Me%CoordType == 1) then - CurrReach%Length = DistanceBetweenTwoGPSPoints(DownstreamNode%X, DownstreamNode%Y, UpstreamNode%X, UpstreamNode%Y) - else - CurrReach%Length = sqrt( (DownstreamNode%X - UpstreamNode%X) ** 2. + & - (DownstreamNode%Y - UpstreamNode%Y) ** 2.) + if (CurrReach%Length < 0) then !Not read from file. + if (Me%CoordType == 1) then + CurrReach%Length = DistanceBetweenTwoGPSPoints(DownstreamNode%X, DownstreamNode%Y, & + UpstreamNode%X, UpstreamNode%Y) + else + CurrReach%Length = sqrt( (DownstreamNode%X - UpstreamNode%X) ** 2. + & + (DownstreamNode%Y - UpstreamNode%Y) ** 2.) + endif endif CurrReach%Slope = (UpstreamNode%CrossSection%BottomLevel - & @@ -5705,9 +5897,8 @@ subroutine InitializeVariables !Local------------------------------------------------------------------ type (T_Node), pointer :: CurrNode - integer :: NodeID, iUp, iDown, NLevels + integer :: NodeID, iUp, iDown type (T_Reach), pointer :: UpReach, DownReach - real :: Av, P, Sw, m, TopH allocate (Me%RunOffVector (Me%TotalNodes)) allocate (Me%GroundVector (Me%TotalNodes)) @@ -5825,78 +6016,115 @@ subroutine InitializeVariables CurrNode => Me%Nodes (NodeID) - if(CurrNode%HasGrid)then + if (CurrNode%HasTwoGridPoints) then + + call SetVariablesOnGridPoint(CurrNode, CurrNode%RightGridI, CurrNode%RightGridJ) + call SetVariablesOnGridPoint(CurrNode, CurrNode%LeftGridI, CurrNode%LeftGridJ) + + else if (CurrNode%HasGrid) then + + call SetVariablesOnGridPoint(CurrNode, CurrNode%GridI, CurrNode%GridJ) + + endif + + enddo + + endif if1 + + end subroutine InitializeVariables + + !--------------------------------------------------------------------------- + + subroutine SetVariablesOnGridPoint(CurrNode, i, j) - Me%ChannelsID (CurrNode%GridI, CurrNode%GridJ) = CurrNode%ID + !Arguments-------------------------------------------------------------- + type (T_Node), pointer :: CurrNode + integer :: i, j + + !Local------------------------------------------------------------------ + integer :: iUp, iDown, NLevels + real :: Av, P, Sw, m, TopH + + Me%ChannelsID (i, j) = CurrNode%ID - Me%ChannelsBottomLevel (CurrNode%GridI, CurrNode%GridJ) = CurrNode%CrossSection%BottomLevel - Me%ChannelsNodeLength (CurrNode%GridI, CurrNode%GridJ) = CurrNode%Length - Me%ChannelsTopArea (CurrNode%GridI, CurrNode%GridJ) = CurrNode%Length * CurrNode%CrossSection%TopWidth - - Me%ChannelsActiveState (CurrNode%GridI, CurrNode%GridJ) = 0 - do iUp = 1, CurrNode%nUpStreamReaches - if (Me%Reaches (CurrNode%UpstreamReaches(iUp))%Active) then - Me%ChannelsActiveState (CurrNode%GridI, CurrNode%GridJ) = 1 - endif - enddo + Me%ChannelsBottomLevel (i, j) = CurrNode%CrossSection%BottomLevel + Me%ChannelsNodeLength (i, j) = CurrNode%Length + Me%ChannelsTopArea (i, j) = CurrNode%Length * CurrNode%CrossSection%TopWidth + + Me%ChannelsActiveState (i, j) = 0 + do iUp = 1, CurrNode%nUpStreamReaches + if (Me%Reaches (CurrNode%UpstreamReaches(iUp))%Active) then + Me%ChannelsActiveState (i, j) = 1 + endif + enddo - do iDown = 1, CurrNode%nDownStreamReaches - if (Me%Reaches (CurrNode%DownStreamReaches(iDown))%Active) then - Me%ChannelsActiveState (CurrNode%GridI, CurrNode%GridJ) = 1 - endif - enddo + do iDown = 1, CurrNode%nDownStreamReaches + if (Me%Reaches (CurrNode%DownStreamReaches(iDown))%Active) then + Me%ChannelsActiveState (i, j) = 1 + endif + enddo - if (CurrNode%CrossSection%Form == Trapezoidal) then + if (CurrNode%CrossSection%Form == Trapezoidal) then - call TrapezoidGeometry (b = CurrNode%CrossSection%BottomWidth, & - mR = CurrNode%CrossSection%Slope, & - mL = CurrNode%CrossSection%Slope, & - h = CurrNode%CrossSection%Height, & - Av = Av, & - P = P, & - Sw = Sw) + call TrapezoidGeometry (b = CurrNode%CrossSection%BottomWidth, & + mR = CurrNode%CrossSection%Slope, & + mL = CurrNode%CrossSection%Slope, & + h = CurrNode%CrossSection%Height, & + Av = Av, & + P = P, & + Sw = Sw) - Me%ChannelsBottomWidth (CurrNode%GridI, CurrNode%GridJ) = CurrNode%CrossSection%BottomWidth - Me%ChannelsSurfaceWidth (CurrNode%GridI, CurrNode%GridJ) = Sw - Me%ChannelsBankSlope (CurrNode%GridI, CurrNode%GridJ) = CurrNode%CrossSection%Slope + Me%ChannelsBottomWidth (i, j) = CurrNode%CrossSection%BottomWidth + Me%ChannelsSurfaceWidth (i, j) = Sw + Me%ChannelsBankSlope (i, j) = CurrNode%CrossSection%Slope - elseif (CurrNode%CrossSection%Form == TrapezoidalFlood) then + elseif (CurrNode%CrossSection%Form == TrapezoidalFlood) then - TopH = CurrNode%CrossSection%Height - CurrNode%CrossSection%MiddleHeight + TopH = CurrNode%CrossSection%Height - CurrNode%CrossSection%MiddleHeight - call TrapezoidGeometry (b = CurrNode%CrossSection%MiddleWidth, & - mR = CurrNode%CrossSection%SlopeTop, & - mL = CurrNode%CrossSection%SlopeTop, & - h = TopH, & - Av = Av, & - P = P, & - Sw = Sw) + call TrapezoidGeometry (b = CurrNode%CrossSection%MiddleWidth, & + mR = CurrNode%CrossSection%SlopeTop, & + mL = CurrNode%CrossSection%SlopeTop, & + h = TopH, & + Av = Av, & + P = P, & + Sw = Sw) - Me%ChannelsBottomWidth (CurrNode%GridI, CurrNode%GridJ) = CurrNode%CrossSection%BottomWidth - Me%ChannelsSurfaceWidth (CurrNode%GridI, CurrNode%GridJ) = Sw - Me%ChannelsBankSlope (CurrNode%GridI, CurrNode%GridJ) = CurrNode%CrossSection%SlopeTop + Me%ChannelsBottomWidth (i, j) = CurrNode%CrossSection%BottomWidth + Me%ChannelsSurfaceWidth (i, j) = Sw + Me%ChannelsBankSlope (i, j) = CurrNode%CrossSection%SlopeTop - elseif (CurrNode%CrossSection%Form == Tabular) then + elseif (CurrNode%CrossSection%Form == Tabular) then - NLevels = CurrNode%CrossSection%NLevels + NLevels = CurrNode%CrossSection%NLevels - m = 0.5 * ( abs(CurrNode%CrossSection%LevelSlopeLeft(NLevels)) & - + CurrNode%CrossSection%LevelSlopeRight(NLevels) ) + m = 0.5 * ( abs(CurrNode%CrossSection%LevelSlopeLeft(NLevels)) & + + CurrNode%CrossSection%LevelSlopeRight(NLevels) ) - Me%ChannelsBottomWidth (CurrNode%GridI, CurrNode%GridJ) = CurrNode%CrossSection%LevelWetPerimeter(NLevels) - Me%ChannelsSurfaceWidth (CurrNode%GridI, CurrNode%GridJ) = CurrNode%CrossSection%LevelSurfaceWidth(NLevels) - Me%ChannelsBankSlope (CurrNode%GridI, CurrNode%GridJ) = m - - endif - - endif + Me%ChannelsBottomWidth (i, j) = CurrNode%CrossSection%LevelWetPerimeter(NLevels) + Me%ChannelsSurfaceWidth (i, j) = CurrNode%CrossSection%LevelSurfaceWidth(NLevels) + Me%ChannelsBankSlope (i, j) = m - enddo + elseif (CurrNode%CrossSection%Form == Culvert) then - endif if1 - - end subroutine InitializeVariables + if (CurrNode%CrossSection%CulvertSectionType == circular_area) then + + Me%ChannelsBottomWidth (i, j) = 0.0 + Me%ChannelsSurfaceWidth (i, j) = 0.0 + Me%ChannelsBankSlope (i, j) = null_real + + else + + Me%ChannelsBottomWidth (i, j) = CurrNode%CrossSection%CulvertWidth + Me%ChannelsSurfaceWidth (i, j) = CurrNode%CrossSection%CulvertWidth + Me%ChannelsBankSlope (i, j) = null_real + + endif + + endif + + end subroutine SetVariablesOnGridPoint !--------------------------------------------------------------------------- @@ -6171,10 +6399,18 @@ subroutine InitializeNodes else - do NodeID = 1, Me%TotalNodes - CurrNode => Me%Nodes(NodeID) - CurrNode%WaterLevel = CurrNode%WaterDepth + CurrNode%CrossSection%BottomLevel - end do + if(Me%InitialWaterLevelON)then + do NodeID = 1, Me%TotalNodes + CurrNode => Me%Nodes(NodeID) + CurrNode%WaterLevel = Me%InitialWaterLevel + CurrNode%WaterDepth = CurrNode%WaterLevel - CurrNode%CrossSection%BottomLevel + end do + else + do NodeID = 1, Me%TotalNodes + CurrNode => Me%Nodes(NodeID) + CurrNode%WaterLevel = CurrNode%WaterDepth + CurrNode%CrossSection%BottomLevel + end do + endif end if @@ -6246,6 +6482,20 @@ subroutine InitializeNodes call TabularGeometry (CurrNode%CrossSection, TopH, Av, Pw, Sw) CurrNode%VolumeMin = Av * CurrNode%Length + elseif (CurrNode%CrossSection%Form .EQ. Culvert) then + + if (CurrNode%CrossSection%CulvertSectionType == circular_area) then + Av = Pi * (CurrNode%CrossSection%CulvertDiameter/2.)**2. + else + Av = CurrNode%CrossSection%CulvertWidth * CurrNode%CrossSection%CulvertHeight + endif + + CurrNode%VolumeMax = Av * CurrNode%Length + + TopH = CurrNode%CrossSection%BottomLevel + Me%MinimumWaterDepth + call CulvertGeometry (CurrNode%CrossSection, TopH, Av, Pw, Sw) + CurrNode%VolumeMin = Av * CurrNode%Length + else stop 'Invalid cross section form - InitializeNodes - ModuleDrainageNetwork - ERR01' end if @@ -6403,6 +6653,14 @@ subroutine ComputeXSFromWaterDepth (CurrNode) CurrNode%WetPerimeter, & CurrNode%SurfaceWidth) + elseif (CurrNode%CrossSection%Form == Culvert) then + + call CulvertGeometry (CurrNode%CrossSection, & + CurrNode%WaterLevel, & + CurrNode%VerticalArea, & + CurrNode%WetPerimeter, & + CurrNode%SurfaceWidth) + else stop 'Invalid cross section form - ComputeXSFromWaterDepth - ModuleDrainageNetwork - ERR01' end if @@ -6517,6 +6775,59 @@ end subroutine TabularGeometry !--------------------------------------------------------------------------- !--------------------------------------------------------------------------- + subroutine CulvertGeometry (CrossSection, WaterLevel, Av, P, Sw) + + !Arguments-------------------------------------------------------------- + type(T_CrossSection) :: CrossSection + real, intent(in) :: WaterLevel + real, intent(out) :: Av, P, Sw + + !Locals---------------------------------------------------------------- + real :: Theta, Rh + + + if (CrossSection%CulvertSectionType == circular_area) then + + if (WaterLevel > CrossSection%BottomLevel + CrossSection%CulvertDiameter) then !Abve Max + Av = Pi * (CrossSection%CulvertDiameter/2.)**2. + P = Pi * CrossSection%CulvertDiameter + Sw = 0.0 + else if (WaterLevel < CrossSection%BottomLevel + 1e-6) then !Almost Zero + Av = 0.0 + P = 0 + Sw = 0.0 + else !Normal Case + Theta = 2.* acos(1.-2.*(WaterLevel - CrossSection%BottomLevel)/CrossSection%CulvertDiameter) + + Av = (Theta - sin(Theta))* CrossSection%CulvertDiameter**2. / 8. + Rh = (Theta - sin(Theta))/(4.0*Theta) * CrossSection%CulvertDiameter + P = Av / Rh + Sw = sin(Theta/2)*CrossSection%CulvertDiameter + endif + + else + + if (WaterLevel > CrossSection%BottomLevel + CrossSection%CulvertHeight) then !Above Max + Av = CrossSection%CulvertWidth * CrossSection%CulvertHeight + P = 2.0 * CrossSection%CulvertWidth + 2.0 * CrossSection%CulvertHeight + Sw = 0.0 + else if (WaterLevel < CrossSection%BottomLevel + 1e-6) then !Almost Zero + Av = 0.0 + P = 0 + Sw = 0.0 + else !Normal Case + Av = (WaterLevel - CrossSection%BottomLevel) * CrossSection%CulvertWidth + P = 2.0 * (WaterLevel - CrossSection%BottomLevel) + CrossSection%CulvertWidth + Sw = CrossSection%CulvertWidth + endif + + endif + + + end subroutine CulvertGeometry + + !--------------------------------------------------------------------------- + subroutine InitializeReaches !Arguments-------------------------------------------------------------- @@ -10160,7 +10471,11 @@ subroutine ModifyDrainageNetWithGrid(DrainageNetworkID, OLFlowToChannels, !Update RunOff and GW Fluxes do NodeID = 1, Me%TotalNodes CurrNode => Me%Nodes (NodeID) - if(CurrNode%HasGrid)then + + if (CurrNode%HasTwoGridPoints) then + Me%RunOffVector(NodeID) = OLFlowToChannels(CurrNode%RightGridI, CurrNode%RightGridJ) + & + OLFlowToChannels(CurrNode%LeftGridI, CurrNode%LeftGridJ) + else if (CurrNode%HasGrid) then Me%RunOffVector(NodeID) = OLFlowToChannels(CurrNode%GridI, CurrNode%GridJ) @@ -10867,6 +11182,11 @@ subroutine ComputeCrossSectionForIntegration (CurrNode, Volume, Depth, Level) call TabularWaterLevel (CurrNode%CrossSection, Av_New, Level) Depth = Level - CurrNode%CrossSection%BottomLevel + elseif (CurrNode%CrossSection%Form == Culvert) then + + call CulvertWaterLevel (CurrNode%CrossSection, Av_New, Level) + Depth = Level - CurrNode%CrossSection%BottomLevel + else stop 'Invalid cross section form - ComputeCrossSection - ModuleDrainageNetwork - ERR01' @@ -11424,7 +11744,7 @@ subroutine ModifyWaterDischarges (LocalDT, iter) if (iter == 1) then call GetDischargeWaterFlow(Me%ObjDischarges, & Me%CurrentTime, iDis, & - Me%Nodes(NodePos)%WaterDepth, & + Me%Nodes(NodePos)%WaterLevel, & Me%DischargesFlow(iDis), STAT = STAT_CALL) if (STAT_CALL/=SUCCESS_) stop 'ModuleDrainageNetwork - ModifyWaterDischarges - ERR04' endif @@ -12213,25 +12533,33 @@ subroutine ModifyReach (ReachID, DT) end select else - - if (Me%HydrodynamicApproximation == KinematicWave) then !if1 + +! if (Me%Nodes(CurrReach%UpstreamNode)%CrossSection%Form == Culvert) then + +! call ComputeFlowThroughCulvert(CurrReach, DT) + +! else + + if (Me%HydrodynamicApproximation == KinematicWave) then !if1 - call ComputeKinematicWave (CurrReach) + call ComputeKinematicWave (CurrReach) - else if (Me%HydrodynamicApproximation == DiffusionWave) then + else if (Me%HydrodynamicApproximation == DiffusionWave) then - !Update Slope based on water level - CurrReach%Slope = (Me%Nodes(CurrReach%UpstreamNode)%Waterlevel - & - Me%Nodes(CurrReach%DownstreamNode)%Waterlevel) / & - CurrReach%Length + !Update Slope based on water level + CurrReach%Slope = (Me%Nodes(CurrReach%UpstreamNode)%Waterlevel - & + Me%Nodes(CurrReach%DownstreamNode)%Waterlevel) / & + CurrReach%Length - call ComputeKinematicWave (CurrReach) + call ComputeKinematicWave (CurrReach) - else + else - call ComputeStVenant (CurrReach, DT) + call ComputeStVenant (CurrReach, DT) - endif + endif + +! endif end if if1 @@ -12309,7 +12637,14 @@ subroutine ComputeCrossSection (CurrNode) call TabularWaterLevel (CurrNode%CrossSection, Av_New, CurrNode%WaterLevel) h_New = CurrNode%WaterLevel - CurrNode%CrossSection%BottomLevel + elseif (CurrNode%CrossSection%Form == Culvert) then + + call CulvertWaterLevel (CurrNode%CrossSection, Av_New, CurrNode%WaterLevel) + h_New = CurrNode%WaterLevel - CurrNode%CrossSection%BottomLevel + else + + stop 'Invalid cross section form - ComputeCrossSection - ModuleDrainageNetwork - ERR01' end if @@ -12435,6 +12770,79 @@ subroutine TabularWaterLevel (CrossSection, Av, WaterLevel) end subroutine TabularWaterLevel + !--------------------------------------------------------------------------- + !--------------------------------------------------------------------------- + + subroutine CulvertWaterLevel (CrossSection, Av, WaterLevel) + + !Arguments-------------------------------------------------------------- + type(T_CrossSection) :: CrossSection + real, intent(in) :: Av + real, intent(out) :: WaterLevel + + !Locals---------------------------------------------------------------- + real :: h, h1, h2, Theta, A, excessArea + + + if (CrossSection%CulvertSectionType == circular_area) then + + if (Av >= Pi * (CrossSection%CulvertDiameter/2.)**2.) then + if (Av <= Pi * (CrossSection%CulvertDiameter/2.)**2. + AllmostZero) then + WaterLevel = CrossSection%CulvertDiameter + CrossSection%BottomLevel + else + excessArea = Av - Pi * (CrossSection%CulvertDiameter/2.)**2. + WaterLevel = CrossSection%CulvertDiameter + CrossSection%BottomLevel + excessArea / CrossSection%CulvertDiameter + endif + else + + if (Av > 0.5 * (Pi * (CrossSection%CulvertDiameter/2.)**2.)) then + h1 = CrossSection%CulvertDiameter + h2 = CrossSection%CulvertDiameter / 2.0 + else + h1 = CrossSection%CulvertDiameter / 2.0 + h2 = 0.0 + endif + + h = (h1+h2) / 2.0 + Theta = 2.* acos(1.-2.*(h)/CrossSection%CulvertDiameter) + A = (Theta - sin(Theta))* CrossSection%CulvertDiameter**2. / 8. + do while (abs(A-Av) > 1e-8) + + if (A < Av) then + h2 = h + else + h1 = h + endif + + h = (h1+h2) / 2.0 + Theta = 2.* acos(1.-2.*(h)/CrossSection%CulvertDiameter) + A = (Theta - sin(Theta))* CrossSection%CulvertDiameter**2. / 8. + + + enddo + + WaterLevel = h + CrossSection%BottomLevel + + endif + + + else + + if (Av >= CrossSection%CulvertWidth * CrossSection%CulvertHeight) then + if (Av <= CrossSection%CulvertWidth * CrossSection%CulvertHeight + 1e-5) then + WaterLevel = CrossSection%CulvertHeight + CrossSection%BottomLevel + else + stop 'Internal Error CulvertWaterLevel' + endif + else + WaterLevel = Av / CrossSection%CulvertWidth + CrossSection%BottomLevel + endif + + endif + + + end subroutine CulvertWaterLevel + !--------------------------------------------------------------------------- !--------------------------------------------------------------------------- @@ -12488,14 +12896,15 @@ subroutine UpdateReachCrossSection (CurrReach) DownNode => Me%Nodes(CurrReach%DownstreamNode) !Volume greater then volume in pools - PoolVolume = UpNode%CrossSection%PoolDepth * UpNode%Length * UpNode%CrossSection%BottomWidth - if (UpNode%VolumeNew > PoolVolume) then - PoolDepth = UpNode%CrossSection%PoolDepth - else - PoolDepth = UpNode%VolumeNew / (UpNode%Length * UpNode%CrossSection%BottomWidth) + if (UpNode%CrossSection%Form /= Tabular) then + PoolVolume = UpNode%CrossSection%PoolDepth * UpNode%Length * UpNode%CrossSection%BottomWidth + if (UpNode%VolumeNew > PoolVolume) then + PoolDepth = UpNode%CrossSection%PoolDepth + else + PoolDepth = UpNode%VolumeNew / (UpNode%Length * UpNode%CrossSection%BottomWidth) + endif endif - ! if (Me%AllowBackwardWater .and. UpNode%WaterLevel < DownNode%WaterLevel .and. DownNode%ID /= Me%OutletNodePos) then ! CurrReach%VerticalArea = (UpNode%VerticalArea + DownNode%VerticalArea) / 2.0 ! CurrReach%HydraulicRadius = CurrReach%VerticalArea / ((UpNode%WetPerimeter + DownNode%WetPerimeter) / 2.0) @@ -12585,6 +12994,17 @@ subroutine UpdateReachCrossSection (CurrReach) WetPerimiter, & aux2) + elseif (UpNode%CrossSection%Form == Culvert) then + + WaterLevel = UpNode%CrossSection%BottomLevel + WaterDepth + + call CulvertGeometry (UpNode%CrossSection, & + UpNode%WaterLevel, & + CurrReach%VerticalArea, & + WetPerimiter, & + aux2) + + else stop 'Invalid cross section form - UpdateReachCrossSection - ModuleDrainageNetwork - ERR01' end if @@ -12688,6 +13108,7 @@ subroutine ComputeStVenant (CurrReach, DT) UpNode => Me%Nodes (CurrReach%UpstreamNode ) DownNode => Me%Nodes (CurrReach%DownstreamNode) + !PRESSURE - explicit ---------------------------------------------------- @@ -12700,7 +13121,7 @@ subroutine ComputeStVenant (CurrReach, DT) !FRICTION - semi-implicit ----------------------------------------------- ! - = (s * m.s-2 * m3.s-1 * s.m(-1/3)) / (m2 * m(4/3)) = m(10/3) / m(10/3) Friction = DT * Gravity * abs(CurrReach%FlowOld) * CurrReach%Manning ** 2. & - / ( CurrReach%VerticalArea * CurrReach%HydraulicRadius ** (4./3.) ) + / ( CurrReach%VerticalArea * CurrReach%HydraulicRadius ** (4./3.) ) !ADVECTION - upwind (in - out)------------------------------------------- !positive direction is downstream @@ -12713,7 +13134,7 @@ subroutine ComputeStVenant (CurrReach, DT) !FLOW--------------------------------------------------------------- FlowNew = ( CurrReach%FlowOld + Advection + Pressure ) & - / ( 1. + Friction ) + / ( 1. + Friction ) if (Me%ComputeOptions%LimitToCriticalFlow) then !Limit to critical flow. Using the critical flow limitation in all cells assumes "slow" flow or @@ -12765,6 +13186,7 @@ subroutine ComputeStVenant (CurrReach, DT) CurrReach%Velocity = CurrReach%FlowNew / (CurrReach%VerticalArea + CurrReach%PoolVerticalArea) + end subroutine ComputeStVenant !--------------------------------------------------------------------------- @@ -12915,6 +13337,122 @@ subroutine ComputeCriticalFlow (CurrReach) end subroutine ComputeCriticalFlow !--------------------------------------------------------------------------- + + subroutine ComputeFlowThroughCulvert(CurrReach, DT) + + !Arguments-------------------------------------------------------------- + type (T_Reach), pointer :: CurrReach + real, intent(in) :: DT + + !Internal--------------------------------------------------------------- + type (T_Node ), pointer :: UpNode, DownNode + real :: UpstreamH, DownstreamH, FlowDir + real :: C, D, TopH, BottomH, PipeFriction + real :: H, A, P, Rh, Flow, Haux, Theta + + UpNode => Me%Nodes (CurrReach%UpstreamNode ) + DownNode => Me%Nodes (CurrReach%DownstreamNode) + + !Q = C * A * sqrt(2*g) * sqrt(H) + if (UpNode%WaterLevel > DownNode%WaterLevel) then + UpstreamH = UpNode%WaterLevel + DownstreamH = DownNode%WaterLevel + FlowDir = 1.0 + else + UpstreamH = DownNode%WaterLevel + DownstreamH = UpNode%WaterLevel + FlowDir = -1.0 + endif + + + if (UpNode%CrossSection%CulvertSectionType == circular_area) then + D = UpNode%CrossSection%CulvertDiameter + elseif (UpNode%CrossSection%CulvertSectionType == rectangular_area) then + D = UpNode%CrossSection%CulvertHeight + endif + + TopH = UpNode%CrossSection%BottomLevel + D + BottomH = UpNode%CrossSection%BottomLevel + + H = UpstreamH - max(DownstreamH, BottomH) + + C = 0.4 !DischargeX%Valve%DischargeCoeficient + + !if the axis valve minus the radius is above the water level in both sides than there is no flow + if ( UpstreamH <= BottomH) then + H = 0. + Flow = 0. + else + !pressure conditions + if (UpstreamH >= TopH) then + if (UpNode%CrossSection%CulvertSectionType == circular_area) then + A = Pi * (D/2.)**2. + P = Pi * D + elseif (UpNode%CrossSection%CulvertSectionType == rectangular_area) then + A = D * UpNode%CrossSection%CulvertWidth + P = 2. * (D + UpNode%CrossSection%CulvertWidth) + endif + !free surface + else + + Haux = UpstreamH - BottomH + + if (UpNode%CrossSection%CulvertSectionType == circular_area) then + + Theta = 2.* acos(1.-2.*Haux/D) + A = (Theta - sin(Theta))* D**2. / 8. + P = Theta * D + + elseif (UpNode%CrossSection%CulvertSectionType == rectangular_area) then + + A = Haux * UpNode%CrossSection%CulvertWidth + P = 2 * Haux + UpNode%CrossSection%CulvertWidth + + endif + + + if (Haux < 0.01) then + !no flow in the pipe is assumed + C = 0. + endif + + + endif + + if (P > 0.) then + Rh = A / P + else + Rh = 0. + endif + + + if (CurrReach%Length > 0.) then + if (Rh > 0.) then + !based in BASIC HYDRAULIC PRINCIPLES OF OPEN-CHANNEL FLOW By Harvey E. Jobson and David C. Froehlich + !U.S. GEOLOGICAL SURVEY Open-File Report 88-707 + + ![ ] = [m/s2] * [s/m^0.333]^2 * [m] / [m]^1.333] = [m] / [m^0.6667] * [m] / [m]^1.333 = + ! [m]^(1 -0.6667 + 1 - 1.333] = [m]^0= [ ] + PipeFriction = 2. * Gravity * C**2. * CurrReach%Manning ** 2. * & + CurrReach%Length / Rh**1.3333 + H = H / (1. + PipeFriction) + endif + endif + + Flow = sqrt(2.* Gravity) * C * A * sqrt(H) + + endif + + Flow = min(Flow, (UpstreamH - DownstreamH) / 2.0 * D * CurrReach%Length / DT) + + CurrReach%FlowNew = Flow * FlowDir + + CurrReach%Velocity = CurrReach%FlowNew / (CurrReach%VerticalArea) + + + end subroutine ComputeFlowThroughCulvert + +!--------------------------------------------------------------------------- subroutine ModifyNode (NodeID, DT) @@ -13428,9 +13966,23 @@ subroutine UpdateChannelsDynamicMatrix CurrNode => Me%Nodes (NodeID) - if(CurrNode%HasGrid)then + if (CurrNode%HasTwoGridPOints) then + + Me%ChannelsWaterLevel(CurrNode%RightGridI, CurrNode%RightGridJ) = CurrNode%WaterLevel + Me%ChannelsWaterLevel(CurrNode%LeftGridI, CurrNode%LeftGridJ) = CurrNode%WaterLevel + + Me%ChannelsVolume (CurrNode%RightGridI, CurrNode%RightGridJ) = CurrNode%VolumeNew + Me%ChannelsVolume (CurrNode%LeftGridI, CurrNode%LeftGridJ) = CurrNode%VolumeNew + + Me%ChannelsMaxVolume (CurrNode%RightGridI, CurrNode%RightGridJ) = CurrNode%VolumeMax + Me%ChannelsMaxVolume (CurrNode%LeftGridI, CurrNode%LeftGridJ) = CurrNode%VolumeMax + + + + elseif (CurrNode%HasGrid)then Me%ChannelsWaterLevel (CurrNode%GridI, CurrNode%GridJ) = CurrNode%WaterLevel + Me%ChannelsVolume (CurrNode%GridI, CurrNode%GridJ) = CurrNode%VolumeNew Me%ChannelsMaxVolume (CurrNode%GridI, CurrNode%GridJ) = CurrNode%VolumeMax @@ -16116,10 +16668,12 @@ subroutine WriteTimeSeriesByNodes (LocalDT) PoolVolume = CurrNode%CrossSection%PoolDepth * CurrNode%Length * CurrNode%CrossSection%BottomWidth !Volume greater then volume in pools - if (CurrNode%VolumeNew > PoolVolume) then - PoolDepth = CurrNode%CrossSection%PoolDepth - else - PoolDepth = CurrNode%VolumeNew / (CurrNode%Length * CurrNode%CrossSection%BottomWidth) + if (Me%Nodes(NodePos)%CrossSection%Form /= Tabular) then + if (CurrNode%VolumeNew > PoolVolume) then + PoolDepth = CurrNode%CrossSection%PoolDepth + else + PoolDepth = CurrNode%VolumeNew / (CurrNode%Length * CurrNode%CrossSection%BottomWidth) + endif endif @@ -19037,3 +19591,4 @@ end module ModuleDrainageNetwork + diff --git a/Software/MOHIDBase1/ModuleFunctions.F90 b/Software/MOHIDBase1/ModuleFunctions.F90 index 62c888b70..4828f904a 100644 --- a/Software/MOHIDBase1/ModuleFunctions.F90 +++ b/Software/MOHIDBase1/ModuleFunctions.F90 @@ -5625,7 +5625,8 @@ subroutine FeedBack_Avrg_WL(FatherMatrix2D, SonMatrix2D, Open3DFather, Open3DSon IgnoreOBCells) !Arguments--------------------------------------------------------------------------------- type(T_Size3D) , intent(IN) :: SizeSon, SizeFather - real, dimension(:,: ), pointer, intent(IN) :: SonMatrix2D, VolumeFather2D, VolumeSon2D + real(8), dimension(:,: ), pointer, intent(IN) :: VolumeFather2D, VolumeSon2D + real, dimension(:,: ), pointer, intent(IN) :: SonMatrix2D integer, dimension(:,:,:), pointer, intent(IN) :: Open3DFather, Open3DSon real, dimension(:,: ), pointer, intent(INOUT) :: FatherMatrix2D integer, dimension(:,: ), pointer, intent(IN) :: ILink, JLink, IgnoreOBCells @@ -5683,7 +5684,8 @@ subroutine FeedBack_Avrg_UV(FatherMatrix, SonMatrix, Open3DFather, Open3DSon, Fa SonVolInFather, AuxMatrix, VolumeSon, VolumeFather, IgnoreOBCells) !Arguments--------------------------------------------------------------------------------- type(T_Size3D) , intent(IN) :: SizeSon, SizeFather - real, dimension(:,:,:), pointer, intent(IN) :: SonMatrix, VolumeSon, VolumeFather + real(8), dimension(:,:,:), pointer, intent(IN) :: VolumeSon, VolumeFather + real, dimension(:,:,:), pointer, intent(IN) :: SonMatrix real, dimension(:,:,:), pointer, intent(INOUT) :: FatherMatrix integer, dimension(:,:), pointer, intent(IN) :: ILink, JLink, IgnoreOBCells integer, dimension(:,:,:), pointer, intent(IN) :: Open3DFather, Open3DSon @@ -5793,7 +5795,8 @@ subroutine FeedBack_Avrg(FatherMatrix, SonMatrix, Open3DFather, Open3DSon, SizeF JLink, DecayTime, DT, SonVolInFather, AuxMatrix, VolumeSon, VolumeFather, IgnoreOBCells) !Arguments--------------------------------------------------------------------------------- type(T_Size3D) , intent(IN) :: SizeSon, SizeFather - real, dimension(:,:,:), pointer, intent(IN) :: SonMatrix, VolumeSon, VolumeFather + real(8), dimension(:,:,:), pointer, intent(IN) :: VolumeSon, VolumeFather + real, dimension(:,:,:), pointer, intent(IN) :: SonMatrix real, dimension(:,:,:), pointer, intent(INOUT) :: FatherMatrix integer, dimension(:,:), pointer, intent(IN) :: ILink, JLink, IgnoreOBCells integer, dimension(:,:,:), pointer, intent(IN) :: Open3DFather, Open3DSon diff --git a/Software/MOHIDBase1/ModuleTimeSerie.F90 b/Software/MOHIDBase1/ModuleTimeSerie.F90 index 635cb90d2..d9e9d2b8b 100644 --- a/Software/MOHIDBase1/ModuleTimeSerie.F90 +++ b/Software/MOHIDBase1/ModuleTimeSerie.F90 @@ -239,7 +239,8 @@ subroutine StartTimeSerie(TimeSerieID, ObjTime, TimeSerieDataFile, PropertyList, Extension, WaterPoints3D, & WaterPoints2D, WaterPoints1D, ResultFileName, Instance, & ModelName, CoordX, CoordY, UseTabulatedData, & - HavePath, Comment, ModelDomain, STAT) + HavePath, Comment, ModelDomain, ReplacePath, STAT) + !Arguments------------------------------------------------------------- integer :: TimeSerieID integer :: ObjTime @@ -258,6 +259,7 @@ subroutine StartTimeSerie(TimeSerieID, ObjTime, logical, optional, intent(IN ) :: HavePath character(len=*), optional, intent(IN ) :: Comment type (T_Polygon), pointer, optional :: ModelDomain + character(len=*), optional, intent(IN ) :: ReplacePath integer, optional, intent(OUT) :: STAT !Local----------------------------------------------------------------- @@ -290,6 +292,14 @@ subroutine StartTimeSerie(TimeSerieID, ObjTime, !Associates module Time Me%ObjTime = AssociateInstance (mTIME_, ObjTime) + + if (present(ReplacePath)) then + Me%ReplacePath = ReplacePath + Me%ReplacePathON = .true. + else + Me%ReplacePathON = .false. + endif + if (present(ModelName)) then Me%ModelName = ModelName @@ -338,19 +348,23 @@ subroutine StartTimeSerie(TimeSerieID, ObjTime, STAT = STAT_CALL) if (STAT_CALL .NE. SUCCESS_) & call SetError(FATAL_, KEYWORD_, "Subroutine StartTimeSerie - ModuleTimeSerie. ERR30") - - call GetData(Me%ReplacePath, & - Me%ObjEnterData, & - flag, & - SearchType = FromFile, & - keyword ='REPLACE_PATH', & - Default = '****', & - ClientModule ='ModuleTimeSerie', & - STAT = STAT_CALL) - if (STAT_CALL .NE. SUCCESS_) & - call SetError(FATAL_, KEYWORD_, "Subroutine StartTimeSerie - ModuleTimeSerie. ERR40") - - if (flag > 0) Me%ReplacePathON = .true. + + if (.not. Me%ReplacePathON) then + + call GetData(Me%ReplacePath, & + Me%ObjEnterData, & + flag, & + SearchType = FromFile, & + keyword ='REPLACE_PATH', & + Default = '****', & + ClientModule ='ModuleTimeSerie', & + STAT = STAT_CALL) + if (STAT_CALL .NE. SUCCESS_) & + call SetError(FATAL_, KEYWORD_, "Subroutine StartTimeSerie - ModuleTimeSerie. ERR40") + + if (flag > 0) Me%ReplacePathON = .true. + + endif !call GetData(Me%IgnoreON, & ! Me%ObjEnterData, & diff --git a/Software/MOHIDBase2/ModuleField4D.F90 b/Software/MOHIDBase2/ModuleField4D.F90 index 276f9cc54..0c198d98d 100644 --- a/Software/MOHIDBase2/ModuleField4D.F90 +++ b/Software/MOHIDBase2/ModuleField4D.F90 @@ -193,6 +193,9 @@ Module ModuleField4D logical :: ExtractPhaseReal = .false. character(Len=WaveNameLength) :: ExtractWave = null_str character(Len=StringLength) :: FieldNameDim = null_str + logical :: SlowStartON = .false. + real :: SlowStartPeriod = null_real + real :: DT = null_real end type T_Harmonics @@ -329,6 +332,7 @@ Module ModuleField4D type (T_Time) :: StartTime type (T_Time) :: EndTime + real :: DT = null_real type (T_Time) :: CurrentTimeExt type (T_Time) :: CurrentTimeInt type (T_ExternalVar) :: ExternalVar @@ -1812,7 +1816,35 @@ subroutine ReadOptions(PropField, ExtractType) STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ReadOptions - ModuleField4D - ERR190' endif - + + call GetData(PropField%Harmonics%SlowStartPeriod, & + Me%ObjEnterData , iflag, & + SearchType = ExtractType, & + keyword = 'SLOWSTART', & + default = FillValueReal, & + ClientModule = 'ModuleField4D', & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadOptions - ModuleField4D - ERR195' + + if (iflag == 1) then + PropField%Harmonics%SlowStartON = .true. + if (PropField%Harmonics%SlowStartPeriod > Me%EndTime - Me%StartTime) then + write(*,*) 'SlowStartPeriod > RunPeriod' + write(*,*) 'Property name =', trim(PropField%ID%Name) + endif + else + PropField%Harmonics%SlowStartON = .false. + endif + + call GetData(PropField%Harmonics%DT, & + Me%ObjEnterData , iflag, & + SearchType = ExtractType, & + keyword = 'HARMONICS_DT', & + default = 900., & + ClientModule = 'ModuleField4D', & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadOptions - ModuleField4D - ERR197' + endif if (LastGroupEqualField) & @@ -2431,6 +2463,9 @@ subroutine ConstructFile(ExtractType) EndTime = Me%EndTime, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ConstructFile - ModuleField4D - ERR190' + call GetComputeTimeStep(Me%ObjTime, DT = Me%DT, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ConstructFile - ModuleField4D - ERR195' + call GetData(Me%File%LonStagName, & Me%ObjEnterData, iflag, & SearchType = ExtractType, & @@ -2856,6 +2891,13 @@ subroutine ConstructPropertyFieldHarmonics(NewPropField) IUB = Me%Size2D%IUB JLB = Me%Size2D%JLB JUB = Me%Size2D%JUB + + + allocate(NewPropField%PreviousField2D (ILB:IUB, JLB:JUB)) + allocate(NewPropField%NextField2D (ILB:IUB, JLB:JUB)) + + NewPropField%PreviousField2D(:,:) = FillValueReal + NewPropField%NextField2D (:,:) = FillValueReal if (.not.Associated(Me%Matrix2D)) then allocate(Me%Matrix2D(ILB:IUB, JLB:JUB)) @@ -2869,8 +2911,21 @@ subroutine ConstructPropertyFieldHarmonics(NewPropField) call ReadValues2DHarmonics(NewPropField) + if (Me%Backtracking) then + stop 'ModuleField4D - ConstructPropertyFieldHarmonics -ERR10' + endif + + NewPropField%PreviousTime = Me%StartTime + NewPropField%NextTime = Me%StartTime + NewPropField%Harmonics%DT + if (.not.NewPropField%Harmonics%Extract) then - call FromHarmonics2Field2D(NewPropField, CurrentTime) + + call FromHarmonics2Field2D(NewPropField, CurrentTime = NewPropField%PreviousTime) + NewPropField%PreviousField2D(:,:) = Me%Matrix2D(:,:) + + call FromHarmonics2Field2D(NewPropField, CurrentTime = NewPropField%NextTime) + NewPropField%NextField2D (:,:) = Me%Matrix2D(:,:) + !call ModifyInputHarmonics2D(NewPropField) endif else i0 @@ -3792,13 +3847,13 @@ subroutine FromHarmonics2Field2D(NewPropField, CurrentTime) !Arguments------------------------------------------------------------- type (T_PropField), pointer :: NewPropField - type (T_Time) :: CurrentTime + type (T_Time), optional :: CurrentTime !Local----------------------------------------------------------------- real, dimension(: ), pointer :: Amplitude, Phase real, dimension(:,:) , pointer :: Field integer :: STAT_CALL, ILB, IUB, JLB, JUB, NW, i, j, n - real :: T1, T2, T3, StateDT + real :: T1, T2, T3, StateDT, DT_Run, Coef !Begin----------------------------------------------------------------- @@ -3829,13 +3884,12 @@ subroutine FromHarmonics2Field2D(NewPropField, CurrentTime) endif else if1 - + do i = ILB,IUB do j = JLB,JUB Amplitude => NewPropField%Harmonics%Amplitude2D(i, j, :) Phase => NewPropField%Harmonics%Phase2D (i, j, :) - #ifndef _NOT_IEEE_ARITHMETIC do n=1,NW @@ -3846,14 +3900,14 @@ subroutine FromHarmonics2Field2D(NewPropField, CurrentTime) if (sum(Amplitude(1:NW))>0.) then - call Task2000Level(WaterLevel = T2, & - TimeReference = NewPropField%Harmonics%TimeReference, & - NWaves = NewPropField%Harmonics%Number, & - WaveAmplitude = Amplitude, & - WavePhase = Phase, & - WaveName = NewPropField%Harmonics%WaveName, & - time_ = CurrentTime, & - STAT = STAT_CALL) + call Task2000Level(WaterLevel = T2, & + TimeReference = NewPropField%Harmonics%TimeReference,& + NWaves = NewPropField%Harmonics%Number, & + WaveAmplitude = Amplitude, & + WavePhase = Phase, & + WaveName = NewPropField%Harmonics%WaveName, & + time_ = CurrentTime, & + STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_)stop 'FromHarmonics2Field2D - ModuleField4D - ERR10' Field(i, j) = T2 + NewPropField%Harmonics%Residual2D(i, j) @@ -3862,25 +3916,25 @@ subroutine FromHarmonics2Field2D(NewPropField, CurrentTime) StateDT = NewPropField%Harmonics%TideStateDT - call Task2000Level(WaterLevel = T1, & - TimeReference = NewPropField%Harmonics%TimeReference, & - NWaves = NewPropField%Harmonics%Number, & - WaveAmplitude = Amplitude, & - WavePhase = Phase, & - WaveName = NewPropField%Harmonics%WaveName, & - time_ = CurrentTime - StateDT, & - STAT = STAT_CALL) + call Task2000Level(WaterLevel = T1, & + TimeReference = NewPropField%Harmonics%TimeReference,& + NWaves = NewPropField%Harmonics%Number, & + WaveAmplitude = Amplitude, & + WavePhase = Phase, & + WaveName = NewPropField%Harmonics%WaveName, & + time_ = CurrentTime - StateDT, & + STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_)stop 'FromHarmonics2Field2D - ModuleField4D - ERR10' - call Task2000Level(WaterLevel = T3, & - TimeReference = NewPropField%Harmonics%TimeReference, & - NWaves = NewPropField%Harmonics%Number, & - WaveAmplitude = Amplitude, & - WavePhase = Phase, & - WaveName = NewPropField%Harmonics%WaveName, & - time_ = CurrentTime + StateDT, & - STAT = STAT_CALL) + call Task2000Level(WaterLevel = T3, & + TimeReference = NewPropField%Harmonics%TimeReference,& + NWaves = NewPropField%Harmonics%Number, & + WaveAmplitude = Amplitude, & + WavePhase = Phase, & + WaveName = NewPropField%Harmonics%WaveName, & + time_ = CurrentTime + StateDT, & + STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_)stop 'FromHarmonics2Field2D - ModuleField4D - ERR10' @@ -3904,46 +3958,72 @@ subroutine FromHarmonics2Field2D(NewPropField, CurrentTime) Field(i, j) = FillValueReal endif + + nullify(Amplitude) + nullify(Phase ) + enddo enddo - endif if1 - - if(NewPropField%HasMultiplyingFactor)then - do j = JLB, JUB - do i = ILB, IUB - Field(i,j) = Field(i,j) * NewPropField%MultiplyingFactor - enddo - enddo - end if + if(NewPropField%HasMultiplyingFactor)then + do j = JLB, JUB + do i = ILB, IUB + Field(i,j) = Field(i,j) * NewPropField%MultiplyingFactor + enddo + enddo + end if - if(NewPropField%HasAddingFactor)then - do j = JLB, JUB - do i = ILB, IUB - Field(i,j) = Field(i,j) + NewPropField%AddingFactor - enddo - enddo - end if + if(NewPropField%HasAddingFactor)then + do j = JLB, JUB + do i = ILB, IUB + Field(i,j) = Field(i,j) + NewPropField%AddingFactor + enddo + enddo + end if - if(NewPropField%MinValueON)then - do j = JLB, JUB - do i = ILB, IUB - if (Field(i,j) < NewPropField%MinValue) then - Field(i,j) = NewPropField%MinValue - endif - enddo - enddo - end if + if(NewPropField%MinValueON)then + do j = JLB, JUB + do i = ILB, IUB + if (Field(i,j) < NewPropField%MinValue) then + Field(i,j) = NewPropField%MinValue + endif + enddo + enddo + end if - if(NewPropField%MaxValueON)then - do j = JLB, JUB - do i = ILB, IUB - if (Field(i,j) > NewPropField%MaxValue) then - Field(i,j) = NewPropField%MaxValue - endif - enddo - enddo - end if + if(NewPropField%MaxValueON)then + do j = JLB, JUB + do i = ILB, IUB + if (Field(i,j) > NewPropField%MaxValue) then + Field(i,j) = NewPropField%MaxValue + endif + enddo + enddo + end if + + + iso: if (NewPropField%Harmonics%SlowStartON) then + + DT_Run = CurrentTime - Me%StartTime + + if (DT_Run < NewPropField%Harmonics%SlowStartPeriod) then + + Coef = (DT_Run / NewPropField%Harmonics%SlowStartPeriod) ** 2. + + do j = JLB, JUB + do i = ILB, IUB + Field(i,j) = Field(i,j) * Coef + enddo + enddo + + endif + + endif iso + + + + endif if1 + if (associated(Me%Matrix3D)) then Me%Matrix3D(ILB:IUB,JLB:JUB,1) = Field(ILB:IUB,JLB:JUB) @@ -4924,7 +5004,8 @@ subroutine ModifyField4D(Field4DID, PropertyIDNumber, CurrentTime, Matrix2D, Mat if (PropField%SpaceDim == Dim2D) then if (PropField%Harmonics%ON) then - call FromHarmonics2Field2D(PropField, Me%CurrentTimeInt) + !call FromHarmonics2Field2D(PropField, Me%CurrentTimeInt) + call ModifyInputHarmonics2D(PropField) else call ModifyInput2D (PropField) endif @@ -5202,7 +5283,8 @@ subroutine ModifyField4DXYZ(Field4DID, PropertyIDNumber, CurrentTime, X, Y, Z, if (PropField%SpaceDim == Dim2D) then if (PropField%Harmonics%ON) then - call FromHarmonics2Field2D(PropField, Me%CurrentTimeInt) + !call FromHarmonics2Field2D(PropField, Me%CurrentTimeInt) + call ModifyInputHarmonics2D(PropField) else call ModifyInput2D (PropField) endif @@ -6179,6 +6261,67 @@ end subroutine ModifyInput3D !---------------------------------------------------------------------------- + + + + subroutine ModifyInputHarmonics2D(PropField) + + !Arguments------------------------------------------------------------ + type (T_PropField), pointer :: PropField + + !Local---------------------------------------------------------------- + integer :: STAT_CALL + + !Begin---------------------------------------------------------------- + + +if1: if (PropField%Harmonics%Extract) then + + call FromHarmonics2Field2D(NewPropField = PropField) + + + else if1 + + call GetWaterPoints2D(HorizontalMapID = Me%ObjHorizontalMap, & + WaterPoints2D = Me%ExternalVar%WaterPoints2D, & + STAT = STAT_CALL) + + if (STAT_CALL/=SUCCESS_) stop 'ModifyInputHarmonics2D - ModuleField4D - ERR10' + + if (Me%CurrentTimeInt >= PropField%NextTime) then + + PropField%PreviousTime = PropField%NextTime + PropField%NextTime = PropField%NextTime + PropField%Harmonics%DT + + call FromHarmonics2Field2D(NewPropField = PropField, CurrentTime = PropField%NextTime) + + PropField%PreviousField2D(:,:) = PropField%NextField2D(:,:) + PropField%NextField2D (:,:) = Me%Matrix2D (:,:) + + + end if + + call InterpolateMatrix2DInTime(ActualTime = Me%CurrentTimeInt, & + Size = Me%WorkSize2D, & + Time1 = PropField%PreviousTime, & + Matrix1 = PropField%PreviousField2D, & + Time2 = PropField%NextTime, & + Matrix2 = PropField%NextField2D, & + MatrixOut = Me%Matrix2D, & + PointsToFill2D = Me%ExternalVar%WaterPoints2D) + + call UnGetHorizontalMap(HorizontalMapID = Me%ObjHorizontalMap, & + Array = Me%ExternalVar%WaterPoints2D, & + STAT = STAT_CALL) + + if (STAT_CALL/=SUCCESS_) stop 'ModifyInputHarmonics2D - ModuleField4D - ERR20' + + endif if1 + + end subroutine ModifyInputHarmonics2D + + + !-------------------------------------------------------------------------- diff --git a/Software/MOHIDBase2/ModuleFillMatrix.F90 b/Software/MOHIDBase2/ModuleFillMatrix.F90 index 851d232ac..7f5c29fe3 100644 --- a/Software/MOHIDBase2/ModuleFillMatrix.F90 +++ b/Software/MOHIDBase2/ModuleFillMatrix.F90 @@ -451,6 +451,7 @@ Module ModuleFillMatrix integer :: ObjField4D = 0 logical :: Field4D = .false. logical :: HarmonicsON = .false. + real :: HarmonicsDT = null_real logical :: SpatialInterpolON = .false. logical :: InterpolOnlyVertically = .false. logical :: GenericYear = .false. @@ -4963,7 +4964,7 @@ recursive subroutine ComputeTimeLag(i, j, Tlag) !Local----------------------------------------------------------------- integer :: i1, j1 real :: T - real :: CellRotation, dr1, dr2 + real :: CellRotationX, dr1, dr2 real :: dx1, dy1, dx2, dy2, dt1, dt2, NewTime real :: wc1, wc2 integer :: STAT_CALL @@ -4983,13 +4984,13 @@ recursive subroutine ComputeTimeLag(i, j, Tlag) dy1 = Me%AnalyticWave%EnteringCell%dy(i1, j1) / 2. wc1 = Me%AnalyticWave%Celerity (i1, j1) - call GetCellRotation(Me%ObjHorizontalGrid, i1, j1, CellRotation, STAT = STAT_CALL) + call GetCellRotation(Me%ObjHorizontalGrid, i1, j1, CellRotationX, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) then stop 'ComputeTimeLag - ModuleFillMatrix - ERR10' endif - dr1 = Me%AnalyticWave%Direction - CellRotation + dr1 = Me%AnalyticWave%Direction - CellRotationX !North in = i1 + 1 @@ -4998,13 +4999,13 @@ recursive subroutine ComputeTimeLag(i, j, Tlag) if (Me%AnalyticWave%CellType (in, jn) == EnteringWaveCell_ .and. & Me%AnalyticWave%TlagMissing (in, jn) == 0) then - call GetCellRotation(Me%ObjHorizontalGrid, in, jn, CellRotation, STAT = STAT_CALL) + call GetCellRotation(Me%ObjHorizontalGrid, in, jn, CellRotationX, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) then stop 'ComputeTimeLag - ModuleFillMatrix - ERR20' endif - dr2 = Me%AnalyticWave%Direction - CellRotation + dr2 = Me%AnalyticWave%Direction - CellRotationX dy2 = Me%AnalyticWave%EnteringCell%dy(in, jn) / 2. wc2 = Me%AnalyticWave%Celerity (in, jn) @@ -5034,13 +5035,13 @@ recursive subroutine ComputeTimeLag(i, j, Tlag) Me%AnalyticWave%TlagMissing (is, js) == 0) then - call GetCellRotation(Me%ObjHorizontalGrid, is, js, CellRotation, STAT = STAT_CALL) + call GetCellRotation(Me%ObjHorizontalGrid, is, js, CellRotationX, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) then stop 'ComputeTimeLag - ModuleFillMatrix - ERR30' endif - dr2 = Me%AnalyticWave%Direction - CellRotation + dr2 = Me%AnalyticWave%Direction - CellRotationX dy2 = Me%AnalyticWave%EnteringCell%dy(is, js) / 2. wc2 = Me%AnalyticWave%Celerity (is, js) @@ -5069,13 +5070,13 @@ recursive subroutine ComputeTimeLag(i, j, Tlag) if (Me%AnalyticWave%CellType (iw, jw) == EnteringWaveCell_ .and. & Me%AnalyticWave%TlagMissing (iw, jw) == 0) then - call GetCellRotation(Me%ObjHorizontalGrid, iw, jw, CellRotation, STAT = STAT_CALL) + call GetCellRotation(Me%ObjHorizontalGrid, iw, jw, CellRotationX, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) then stop 'ComputeTimeLag - ModuleFillMatrix - ERR40' endif - dr2 = Me%AnalyticWave%Direction - CellRotation + dr2 = Me%AnalyticWave%Direction - CellRotationX dx2 = Me%AnalyticWave%EnteringCell%dx(iw, jw) / 2. wc2 = Me%AnalyticWave%Celerity (iw, jw) @@ -5105,13 +5106,13 @@ recursive subroutine ComputeTimeLag(i, j, Tlag) if (Me%AnalyticWave%CellType (ie, je) == EnteringWaveCell_ .and. & Me%AnalyticWave%TlagMissing (ie, je) == 0) then - call GetCellRotation(Me%ObjHorizontalGrid, ie, je, CellRotation, STAT = STAT_CALL) + call GetCellRotation(Me%ObjHorizontalGrid, ie, je, CellRotationX, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) then stop 'ComputeTimeLag - ModuleFillMatrix - ERR50' endif - dr2 = Me%AnalyticWave%Direction - CellRotation + dr2 = Me%AnalyticWave%Direction - CellRotationX dx2 = Me%AnalyticWave%EnteringCell%dx(ie, je) / 2. wc2 = Me%AnalyticWave%Celerity (ie, je) @@ -5211,7 +5212,7 @@ subroutine ConstructSpaceTimeSerie (ExtractType, PointsToFill2D, PointsToFill3D) !Local---------------------------------------------------------------- integer :: STAT_CALL, i integer :: iflag, file, column - character(len = StringLength), dimension(3) :: FileName = " " + character(len = StringLength), dimension(3) :: Filename = " " character(len = StringLength), dimension(3) :: DataColumn = " " type(T_TimeSerie), pointer :: CurrentTimeSerie, NewTimeSerie integer :: nTimeSeries = 1 @@ -6102,7 +6103,22 @@ subroutine ReadOptionsHDFinput(ExtractType) default = .false., & ClientModule = 'ModuleFillMatrix', & STAT = STAT_CALL) - if (STAT_CALL .NE. SUCCESS_) stop 'ConstructHDFInput - ModuleFillMatrix - ERR310' + if (STAT_CALL .NE. SUCCESS_) stop 'ConstructHDFInput - ModuleFillMatrix - ERR310' + + if (CurrentHDF%HarmonicsON) then + + CurrentHDF%From2Dto3D = .true. + + call GetData(CurrentHDF%HarmonicsDT, & + Me%ObjEnterData , iflag, & + SearchType = ExtractType, & + keyword = 'HARMONICS_DT', & + default = 900., & + ClientModule = 'ModuleField4D', & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ConstructHDFInput - ModuleFillMatrix - ERR315' + + endif call GetData(CurrentHDF%SpatialInterpolON, & Me%ObjEnterData , iflag, & @@ -6761,20 +6777,40 @@ subroutine ConstructField4DInterpol(ExtractType, ClientID, PointsToFill2D, Point else icount = 0 - do k = Me%WorkSize3D%KLB, Me%WorkSize3D%KUB - do j = Me%WorkSize3D%JLB, Me%WorkSize3D%JUB - do i = Me%WorkSize3D%ILB, Me%WorkSize3D%IUB - if (PointsToFill3D(i,j,k) == WaterPoint) icount = icount + 1 - enddo - enddo - enddo - Ncells = icount - CurrentHDF%Ncells = Ncells - - allocate(CurrentHDF%Z(1:NCells)) + if (CurrentHDF%From2Dto3D) then + + do j = Me%WorkSize3D%JLB, Me%WorkSize3D%JUB + do i = Me%WorkSize3D%ILB, Me%WorkSize3D%IUB + if (PointsToFill3D(i,j,Me%WorkSize3D%KUB) == WaterPoint) icount = icount + 1 + enddo + enddo + + Ncells = icount + CurrentHDF%Ncells = Ncells + + else + + do k = Me%WorkSize3D%KLB, Me%WorkSize3D%KUB + do j = Me%WorkSize3D%JLB, Me%WorkSize3D%JUB + do i = Me%WorkSize3D%ILB, Me%WorkSize3D%IUB + if (PointsToFill3D(i,j,k) == WaterPoint) icount = icount + 1 + enddo + enddo + enddo + + Ncells = icount + CurrentHDF%Ncells = Ncells + + allocate(CurrentHDF%Z(1:NCells)) - CurrentHDF%Z(1:NCells) = FillValueReal + CurrentHDF%Z(1:NCells) = FillValueReal + + endif + + + + endif @@ -6810,21 +6846,41 @@ subroutine ConstructField4DInterpol(ExtractType, ClientID, PointsToFill2D, Point icount = 0 - do k = Me%WorkSize3D%KLB, Me%WorkSize3D%KUB - do j = Me%WorkSize3D%JLB, Me%WorkSize3D%JUB - do i = Me%WorkSize3D%ILB, Me%WorkSize3D%IUB + if (CurrentHDF%From2Dto3D) then + + do j = Me%WorkSize3D%JLB, Me%WorkSize3D%JUB + do i = Me%WorkSize3D%ILB, Me%WorkSize3D%IUB - if (PointsToFill3D(i,j,k) == WaterPoint) then + if (PointsToFill3D(i,j,Me%WorkSize3D%KUB) == WaterPoint) then - icount = icount + 1 - CurrentHDF%X(icount) = CoordX(i, j) - CurrentHDF%Y(icount) = CoordY(i, j) + icount = icount + 1 + CurrentHDF%X(icount) = CoordX(i, j) + CurrentHDF%Y(icount) = CoordY(i, j) - endif + endif - enddo - enddo - enddo + enddo + enddo + + else + + do k = Me%WorkSize3D%KLB, Me%WorkSize3D%KUB + do j = Me%WorkSize3D%JLB, Me%WorkSize3D%JUB + do i = Me%WorkSize3D%ILB, Me%WorkSize3D%IUB + + if (PointsToFill3D(i,j,k) == WaterPoint) then + + icount = icount + 1 + CurrentHDF%X(icount) = CoordX(i, j) + CurrentHDF%Y(icount) = CoordY(i, j) + + endif + + enddo + enddo + enddo + + endif endif @@ -7640,68 +7696,105 @@ subroutine ModifyField4DInterpol(CurrentTime, Matrix3D, Matrix2D, CurrentHDF, In else if2D + +F2D3D: if (CurrentHDF%From2Dto3D) then + + call ModifyField4DXYZ(Field4DID = CurrentHDF%ObjField4D, & + PropertyIDNumber = Me%PropertyID%IDNumber, & + CurrentTime = CurrentTime, & + X = CurrentHDF%X, & + Y = CurrentHDF%Y, & + Field = CurrentHDF%Prop, & + NoData = CurrentHDF%NoData, & + Instant = Instant, & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ModifyField4DInterpol - ModuleFillMatrix - ERR70' + + icount = 0 + + do j = Me%WorkSize3D%JLB, Me%WorkSize3D%JUB + do i = Me%WorkSize3D%ILB, Me%WorkSize3D%IUB + if (Me%PointsToFill3D(i,j,Me%WorkSize3D%KUB) == WaterPoint) then + icount = icount + 1 + if (CurrentHDF%NoData(icount)) then + write(*,*) 'No data in 2D cell I=',i + di, 'J=',j + dj + stop 'ModifyField4DInterpol - ModuleFillMatrix - ERR80' + else + do k = Me%WorkSize3D%KLB, Me%WorkSize3D%KUB + if (Me%PointsToFill3D(i,j,k) == WaterPoint) then + Matrix3D(i, j, k) = CurrentHDF%Prop(icount) + endif + enddo + endif + endif + enddo + enddo + + else F2D3D - call GetGeometryDistances(Me%ObjGeometry, ZCellCenter, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ModifyField4DInterpol - ModuleFillMatrix - ERR50' + call GetGeometryDistances(Me%ObjGeometry, ZCellCenter, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ModifyField4DInterpol - ModuleFillMatrix - ERR50' - icount = 0 + icount = 0 - do k = Me%WorkSize3D%KLB, Me%WorkSize3D%KUB - do j = Me%WorkSize3D%JLB, Me%WorkSize3D%JUB - do i = Me%WorkSize3D%ILB, Me%WorkSize3D%IUB + do k = Me%WorkSize3D%KLB, Me%WorkSize3D%KUB + do j = Me%WorkSize3D%JLB, Me%WorkSize3D%JUB + do i = Me%WorkSize3D%ILB, Me%WorkSize3D%IUB - if (Me%PointsToFill3D(i,j,k) == WaterPoint) then + if (Me%PointsToFill3D(i,j,k) == WaterPoint) then - icount = icount + 1 - CurrentHDF%Z(icount) = ZCellCenter(i, j, k) - - endif + icount = icount + 1 + CurrentHDF%Z(icount) = ZCellCenter(i, j, k) - enddo - enddo - enddo - - call UnGetGeometry(Me%ObjGeometry, ZCellCenter, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ModifyField4DInterpol - ModuleFillMatrix - ERR60' - - call ModifyField4DXYZ(Field4DID = CurrentHDF%ObjField4D, & - PropertyIDNumber = Me%PropertyID%IDNumber, & - CurrentTime = CurrentTime, & - X = CurrentHDF%X, & - Y = CurrentHDF%Y, & - Z = CurrentHDF%Z, & - Field = CurrentHDF%Prop, & - NoData = CurrentHDF%NoData, & - Instant = Instant, & - STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ModifyField4DInterpol - ModuleFillMatrix - ERR70' - - icount = 0 - - do k = Me%WorkSize3D%KLB, Me%WorkSize3D%KUB - do j = Me%WorkSize3D%JLB, Me%WorkSize3D%JUB - do i = Me%WorkSize3D%ILB, Me%WorkSize3D%IUB + endif - if (Me%PointsToFill3D(i,j,k) == WaterPoint) then + enddo + enddo + enddo + + call UnGetGeometry(Me%ObjGeometry, ZCellCenter, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ModifyField4DInterpol - ModuleFillMatrix - ERR60' + + call ModifyField4DXYZ(Field4DID = CurrentHDF%ObjField4D, & + PropertyIDNumber = Me%PropertyID%IDNumber, & + CurrentTime = CurrentTime, & + X = CurrentHDF%X, & + Y = CurrentHDF%Y, & + Z = CurrentHDF%Z, & + Field = CurrentHDF%Prop, & + NoData = CurrentHDF%NoData, & + Instant = Instant, & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ModifyField4DInterpol - ModuleFillMatrix - ERR70' + + icount = 0 + + do k = Me%WorkSize3D%KLB, Me%WorkSize3D%KUB + do j = Me%WorkSize3D%JLB, Me%WorkSize3D%JUB + do i = Me%WorkSize3D%ILB, Me%WorkSize3D%IUB + + if (Me%PointsToFill3D(i,j,k) == WaterPoint) then - icount = icount + 1 - if (CurrentHDF%NoData(icount)) then - write(*,*) 'No data in 3D cell I=',i + di, 'J=',j + dj, 'K=',k - stop 'ModifyField4DInterpol - ModuleFillMatrix - ERR80' - else - Matrix3D(i, j, k) = CurrentHDF%Prop(icount) - endif + icount = icount + 1 + if (CurrentHDF%NoData(icount)) then + write(*,*) 'No data in 3D cell I=',i + di, 'J=',j + dj, 'K=',k + stop 'ModifyField4DInterpol - ModuleFillMatrix - ERR80' + else + Matrix3D(i, j, k) = CurrentHDF%Prop(icount) + endif - endif + endif - enddo - enddo - enddo + enddo + enddo + enddo - + endif F2D3D endif if2D - if (icount /= CurrentHDF%Ncells) then + if (icount > CurrentHDF%Ncells) then + write(*,*) 'icount =', icount + write(*,*) 'CurrentHDF%Ncells =', CurrentHDF%Ncells stop 'ModifyField4DInterpol - ModuleFillMatrix - ERR90' endif @@ -10317,9 +10410,10 @@ end subroutine ModifyHDFInput2D !---------------------------------------------------------------------------- - subroutine ModifyHDFInput2DHarmonics(CurrentHDF) + subroutine ModifyHDFInput2DHarmonics(PointsToFill2D, CurrentHDF) !Arguments------------------------------------------------------------ + integer, dimension(:,:), pointer :: PointsToFill2D type(T_Field4D) :: CurrentHDF !Local---------------------------------------------------------------- type (T_Time) :: Now, CurrentTime @@ -10335,26 +10429,64 @@ subroutine ModifyHDFInput2DHarmonics(CurrentHDF) call BacktrackingTime(Now) else Now = CurrentTime - endif - + endif + + if (CurrentHDF%SpatialInterpolON) then - call ModifyField4DInterpol(CurrentTime = Now, & - Matrix2D = Me%Matrix2D, & - CurrentHDF = CurrentHDF) + if (Me%BackTracking) then + stop 'ModifyHDFInput2DHarmonics - ModuleFillMatrix - ERR20' + endif + + if (Now == Me%BeginTime) then + + CurrentHDF%NextTime = Me%BeginTime + + call ModifyField4DInterpol(CurrentTime = CurrentHDF%NextTime, & + Matrix2D = CurrentHDF%NextField2D, & + CurrentHDF = CurrentHDF) + + endif + + if (Now >= CurrentHDF%NextTime) then + + CurrentHDF%PreviousTime = CurrentHDF%NextTime + CurrentHDF%NextTime = CurrentHDF%NextTime + CurrentHDF%HarmonicsDT + + call ModifyField4DInterpol(CurrentTime = CurrentHDF%NextTime, & + Matrix2D = Me%Matrix2D, & + CurrentHDF = CurrentHDF) + + CurrentHDF%PreviousField2D(:,:) = CurrentHDF%NextField2D(:,:) + CurrentHDF%NextField2D (:,:) = Me%Matrix2D (:,:) + + endif + + call InterpolateMatrix2DInTime(ActualTime = Now, & + Size = Me%WorkSize2D, & + Time1 = CurrentHDF%PreviousTime, & + Matrix1 = CurrentHDF%PreviousField2D,& + Time2 = CurrentHDF%NextTime, & + Matrix2 = CurrentHDF%NextField2D, & + MatrixOut = Me%Matrix2D, & + PointsToFill2D = PointsToFill2D) else call ModifyField4D(Field4DID = CurrentHDF%ObjField4D, & - PropertyIDNumber = Me%PropertyID%IDNumber, & - CurrentTime = Now, & - Matrix2D = Me%Matrix2D, & - STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_)stop 'ModifyHDFInput2DHarmonics - ModuleFillMatrix - ERR20' + PropertyIDNumber = Me%PropertyID%IDNumber, & + CurrentTime = Now, & + Matrix2D = Me%Matrix2D, & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_)stop 'ModifyHDFInput2DHarmonics - ModuleFillMatrix - ERR30' endif + + + + end subroutine ModifyHDFInput2DHarmonics !---------------------------------------------------------------------------- @@ -10376,7 +10508,7 @@ subroutine ModifyHDFInput2DRainType(PointsToFill2D, CurrentHDF) call GetComputeCurrentTime(Me%ObjTime, Now, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ModifyHDFInput2DRainType - ModuleFillMatrix - ERR010' -i3: if (Now > CurrentHDF%NextTime) then +i3: if (Now > CurrentHDF%NextTime) then call ActualizeHDFTimes (Now, CurrentHDF) call ActualizeHDFValues (CurrentHDF, CurrentHDF%PreviousInstant, CurrentHDF%PreviousField2D) call ActualizeHDFValues (CurrentHDF, CurrentHDF%NextInstant, CurrentHDF%NextField2D) @@ -10597,7 +10729,7 @@ subroutine ModifyHDFInput2DTime(PointsToFill2D, CurrentHDF) i1: if (CurrentHDF%Field4D .and. CurrentHDF%HarmonicsOn) then - call ModifyHDFInput2DHarmonics(CurrentHDF) + call ModifyHDFInput2DHarmonics(PointsToFill2D, CurrentHDF) else i1 @@ -11876,7 +12008,7 @@ subroutine KillFillMatrix(FillMatrixID, STAT) if (CurrentHDF%SpatialInterpolON) then - if (Me%Dim == Dim3D) then + if (Me%Dim == Dim3D .and. .not. CurrentHDF%From2Dto3D) then deallocate(CurrentHDF%Z) endif diff --git a/Software/MOHIDBase2/ModuleGeometry.F90 b/Software/MOHIDBase2/ModuleGeometry.F90 index d799adc30..27c1b0289 100644 --- a/Software/MOHIDBase2/ModuleGeometry.F90 +++ b/Software/MOHIDBase2/ModuleGeometry.F90 @@ -176,12 +176,14 @@ Module ModuleGeometry !Interfaces---------------------------------------------------------------- - private :: UnGetGeometry2Dreal + private :: UnGetGeometry2Dreal4 + private :: UnGetGeometry2Dreal8 private :: UnGetGeometry3Dreal4 private :: UnGetGeometry3Dreal8 private :: UnGetGeometry2Dinteger interface UnGetGeometry - module procedure UnGetGeometry2Dreal + module procedure UnGetGeometry2Dreal4 + module procedure UnGetGeometry2Dreal8 module procedure UnGetGeometry3Dreal4 module procedure UnGetGeometry3Dreal8 module procedure UnGetGeometry2Dinteger @@ -6367,30 +6369,26 @@ end subroutine UnGetGeometry2Dinteger !-------------------------------------------------------------------------- - subroutine UnGetGeometry2Dreal(GeometryID, Array, STAT) + subroutine UnGetGeometry2Dreal4(GeometryID, Array, STAT) !Arguments------------------------------------------------------------- integer :: GeometryID - real, pointer, dimension(:,:) :: Array + real(4), pointer, dimension(:,:) :: Array integer, optional, intent(OUT) :: STAT - - !Local----------------------------------------------------------------- integer :: ready_ integer :: STAT_ - !---------------------------------------------------------------------- STAT_ = UNKNOWN_ - call Ready(GeometryID, ready_) cd1 : if (ready_ .EQ. READ_LOCK_ERR_) then nullify(Array) - call Read_UnLock(mGEOMETRY_, Me%InstanceID, "UnGetGeometry2Dreal") + call Read_UnLock(mGEOMETRY_, Me%InstanceID, "UnGetGeometry2Dreal4") STAT_ = SUCCESS_ else @@ -6401,8 +6399,38 @@ subroutine UnGetGeometry2Dreal(GeometryID, Array, STAT) !---------------------------------------------------------------------- - end subroutine UnGetGeometry2Dreal + end subroutine UnGetGeometry2Dreal4 + + !-------------------------------------------------------------------------- + subroutine UnGetGeometry2Dreal8(GeometryID, Array, STAT) + !Arguments------------------------------------------------------------- + integer :: GeometryID + real(8), pointer, dimension(:,:) :: Array + integer, optional, intent(OUT) :: STAT + + !Local----------------------------------------------------------------- + integer :: ready_ + integer :: STAT_ + !---------------------------------------------------------------------- + + STAT_ = UNKNOWN_ + + call Ready(GeometryID, ready_) + +cd1 : if (ready_ .EQ. READ_LOCK_ERR_) then + + nullify(Array) + call Read_UnLock(mGEOMETRY_, Me%InstanceID, "UnGetGeometry2Dreal8") + STAT_ = SUCCESS_ + else + STAT_ = ready_ + end if cd1 + + if (present(STAT)) STAT = STAT_ + + end subroutine UnGetGeometry2Dreal8 + !-------------------------------------------------------------------------- subroutine UnGetGeometry3Dreal4(GeometryID, Array, STAT) diff --git a/Software/MOHIDBase2/ModuleHorizontalGrid.F90 b/Software/MOHIDBase2/ModuleHorizontalGrid.F90 index 0c78834d5..9b0aca7bf 100644 --- a/Software/MOHIDBase2/ModuleHorizontalGrid.F90 +++ b/Software/MOHIDBase2/ModuleHorizontalGrid.F90 @@ -9405,12 +9405,13 @@ end subroutine GetGridRotation !-------------------------------------------------------------------------- !Get cell rotation in radians - subroutine GetCellRotation(HorizontalGridID, i, j, CellRotation, STAT) + subroutine GetCellRotation(HorizontalGridID, i, j, CellRotationX, CellRotationY, STAT) !Arguments------------------------------------------------------------- integer :: HorizontalGridID integer :: i, j - real :: CellRotation + real :: CellRotationX + real, optional :: CellRotationY integer, optional :: STAT !Local----------------------------------------------------------------- integer :: STAT_, ready_ @@ -9423,17 +9424,21 @@ subroutine GetCellRotation(HorizontalGridID, i, j, CellRotation, STAT) cd1 : if (ready_ == IDLE_ERR_ .or. ready_ == READ_LOCK_ERR_) then - CellRotation = 0. - + + CellRotationX = 0. + CellRotationY = Pi/2. + if (Me%Distortion) then - !with distortion, the cell trigonometric circle origin is coincident with cell "x plane" - !and rotation Y is not accounted - CellRotation = Me%RotationX(i, j) + CellRotationX = Me%RotationX(i, j) + + CellRotationY = Me%RotationY(i, j) else if (Me%RegularRotation) then - CellRotation = Me%Grid_Angle * Pi / 180. + CellRotationX = Me%Grid_Angle * Pi / 180. + + CellRotationY = CellRotationX + Pi/2. endif diff --git a/Software/MOHIDBase2/ModuleNETCDF.F90 b/Software/MOHIDBase2/ModuleNETCDF.F90 index 7b880a3a4..2d9d7f27a 100644 --- a/Software/MOHIDBase2/ModuleNETCDF.F90 +++ b/Software/MOHIDBase2/ModuleNETCDF.F90 @@ -340,8 +340,12 @@ end subroutine GetNCDFFileAccess !-------------------------------------------------------------------------- - subroutine NETCDFWriteHeader(NCDFID, Title, Convention, Version, History, & - iDate, Source, Institution, References, STAT) + subroutine NETCDFWriteHeader(NCDFID, Title, Convention, Version, History, & + iDate, Source, Institution, References, & + geospatial_lat_min, geospatial_lat_max, & + geospatial_lon_min, geospatial_lon_max, & + CoordSysBuilder, contact, field_type, bulletin_date, & + bulletin_type, comment, STAT) !Arguments------------------------------------------------------------- @@ -351,7 +355,17 @@ subroutine NETCDFWriteHeader(NCDFID, Title, Convention, Version, History, & integer :: iDate character(len=*) :: Source, Institution character(len=*) :: References - integer, optional :: STAT + real , optional :: geospatial_lat_min + real , optional :: geospatial_lat_max + real , optional :: geospatial_lon_min + real , optional :: geospatial_lon_max + character(len=*), optional :: CoordSysBuilder + character(len=*), optional :: contact + character(len=*), optional :: field_type + character(len=*), optional :: bulletin_date + character(len=*), optional :: bulletin_type + character(len=*), optional :: comment + integer , optional :: STAT !Local----------------------------------------------------------------- integer :: STAT_, ready_ @@ -365,14 +379,15 @@ subroutine NETCDFWriteHeader(NCDFID, Title, Convention, Version, History, & if (ready_ .EQ. IDLE_ERR_) then - Me%Title = trim(Title) - Me%Convention = trim(Convention ) - Me%Version = trim(Version ) - Me%History = trim(History ) - Me%Source = trim(Source ) - Me%Institution = trim(Institution) - Me%References = trim(References ) - Me%iDate = iDate + Me%Title = trim(Title) + Me%Convention = trim(Convention ) + Me%Version = trim(Version ) + Me%History = trim(History ) + Me%Source = trim(Source ) + Me%Institution = trim(Institution) + Me%References = trim(References ) + Me%iDate = iDate + !Enter definition mode STAT_CALL = nf90_redef(ncid = Me%ncid) @@ -400,7 +415,58 @@ subroutine NETCDFWriteHeader(NCDFID, Title, Convention, Version, History, & if(STAT_CALL /= nf90_noerr) stop 'ModuleNETCDF - NETCDFWriteHeader - ERR07' STAT_CALL = nf90_put_att(Me%ncid, nf90_global, 'references', Me%References) - if(STAT_CALL /= nf90_noerr) stop 'ModuleNETCDF - NETCDFWriteHeader - ERR08' + if(STAT_CALL /= nf90_noerr) stop 'ModuleNETCDF - NETCDFWriteHeader - ERR08' + + if (present(geospatial_lat_min)) then + STAT_CALL = nf90_put_att(Me%ncid, nf90_global, 'geospatial_lat_min', geospatial_lat_min) + if(STAT_CALL /= nf90_noerr) stop 'ModuleNETCDF - NETCDFWriteHeader - ERR100' + endif + + + if (present(geospatial_lat_max)) then + STAT_CALL = nf90_put_att(Me%ncid, nf90_global, 'geospatial_lat_max', geospatial_lat_max) + if(STAT_CALL /= nf90_noerr) stop 'ModuleNETCDF - NETCDFWriteHeader - ERR110' + endif + + if (present(geospatial_lon_min)) then + STAT_CALL = nf90_put_att(Me%ncid, nf90_global, 'geospatial_lon_min', geospatial_lon_min) + if(STAT_CALL /= nf90_noerr) stop 'ModuleNETCDF - NETCDFWriteHeader - ERR120' + endif + + if (present(geospatial_lon_max)) then + STAT_CALL = nf90_put_att(Me%ncid, nf90_global, 'geospatial_lon_max', geospatial_lon_max) + if(STAT_CALL /= nf90_noerr) stop 'ModuleNETCDF - NETCDFWriteHeader - ERR130' + endif + + if (present(CoordSysBuilder)) then + STAT_CALL = nf90_put_att(Me%ncid, nf90_global, '_CoordSysBuilder', CoordSysBuilder) + if(STAT_CALL /= nf90_noerr) stop 'ModuleNETCDF - NETCDFWriteHeader - ERR140' + endif + + if (present(contact)) then + STAT_CALL = nf90_put_att(Me%ncid, nf90_global, 'contact', contact) + if(STAT_CALL /= nf90_noerr) stop 'ModuleNETCDF - NETCDFWriteHeader - ERR150' + endif + + if (present(field_type)) then + STAT_CALL = nf90_put_att(Me%ncid, nf90_global, 'field_type', field_type) + if(STAT_CALL /= nf90_noerr) stop 'ModuleNETCDF - NETCDFWriteHeader - ERR160' + endif + + if (present(bulletin_date)) then + STAT_CALL = nf90_put_att(Me%ncid, nf90_global, 'bulletin_date', bulletin_date) + if(STAT_CALL /= nf90_noerr) stop 'ModuleNETCDF - NETCDFWriteHeader - ERR170' + endif + + if (present(bulletin_type)) then + STAT_CALL = nf90_put_att(Me%ncid, nf90_global, 'bulletin_type', bulletin_type) + if(STAT_CALL /= nf90_noerr) stop 'ModuleNETCDF - NETCDFWriteHeader - ERR180' + endif + + if (present(comment)) then + STAT_CALL = nf90_put_att(Me%ncid, nf90_global, 'comment', comment) + if(STAT_CALL /= nf90_noerr) stop 'ModuleNETCDF - NETCDFWriteHeader - ERR180' + endif !Exit definition mode STAT_CALL = nf90_enddef(Me%ncid) @@ -424,9 +490,9 @@ subroutine NETCDFWriteAttributes (VarID, LongName, StandardName, Units, Positive Calendar, ScaleFactor, FillValue, & MissingValue, ValidMin, ValidMax, & Maximum, Minimum, Add_Offset, Step, & - iFillValue, coordinates, bounds, axis, & - reference) - + iFillValue, iMissingValue, & + coordinates, bounds, axis, reference, & + CoordinateAxisType, CoordinateZisPositive) !Arguments------------------------------------------------------------- integer :: VarID character(len=*), optional :: LongName @@ -438,6 +504,7 @@ subroutine NETCDFWriteAttributes (VarID, LongName, StandardName, Units, Positive real , optional :: FillValue integer , optional :: iFillValue real , optional :: MissingValue + integer , optional :: iMissingValue real , optional :: ValidMin real , optional :: ValidMax real , optional :: Minimum @@ -448,7 +515,8 @@ subroutine NETCDFWriteAttributes (VarID, LongName, StandardName, Units, Positive character(len=*), optional :: bounds character(len=*), optional :: axis character(len=*), optional :: reference - + character(len=*), optional :: CoordinateAxisType + character(len=*), optional :: CoordinateZisPositive !Local----------------------------------------------------------------- integer :: STAT_CALL, xtype @@ -469,9 +537,11 @@ subroutine NETCDFWriteAttributes (VarID, LongName, StandardName, Units, Positive if(STAT_CALL /= nf90_noerr) stop 'NETCDFWriteAttributes - ModuleNETCDF - ERR02' endif - if(present(Units))then - STAT_CALL = nf90_put_att(Me%ncid, VarID, 'units', trim(Units)) - if(STAT_CALL /= nf90_noerr) stop 'NETCDFWriteAttributes - ModuleNETCDF - ERR03' + if(present(Units)) then + if (units/=null_str) then + STAT_CALL = nf90_put_att(Me%ncid, VarID, 'units', trim(Units)) + if(STAT_CALL /= nf90_noerr) stop 'NETCDFWriteAttributes - ModuleNETCDF - ERR03' + endif endif if(present(ScaleFactor))then @@ -480,6 +550,9 @@ subroutine NETCDFWriteAttributes (VarID, LongName, StandardName, Units, Positive end if if(present(FillValue))then + if(present(MissingValue))then + FillValue = MissingValue + end if STAT_CALL = nf90_inquire_variable(ncid = Me%ncid, varid = VarID, xtype = xtype) if (xtype == nf90_double) then !STAT_CALL = nf90_put_att(ncid = Me%ncid, varid = VarID, name = '_FillValue', values = NF90_FILL_DOUBLE) @@ -588,9 +661,17 @@ subroutine NETCDFWriteAttributes (VarID, LongName, StandardName, Units, Positive endif if(present(iFillValue))then + if(present(iMissingValue))then + iFillValue = iMissingValue + end if STAT_CALL = nf90_put_att(Me%ncid, VarID, '_FillValue', iFillValue) if(STAT_CALL /= nf90_noerr) stop 'NETCDFWriteAttributes - ModuleNETCDF - ERR19' end if + + if(present(iMissingValue))then + STAT_CALL = nf90_put_att(Me%ncid, VarID, 'missing_Value', iMissingValue) + if(STAT_CALL /= nf90_noerr) stop 'NETCDFWriteAttributes - ModuleNETCDF - ERR20' + end if if(present(bounds))then @@ -615,6 +696,19 @@ subroutine NETCDFWriteAttributes (VarID, LongName, StandardName, Units, Positive STAT_CALL = nf90_put_att(Me%ncid, VarID, 'reference', reference) if(STAT_CALL /= nf90_noerr) stop 'NETCDFWriteAttributes - ModuleNETCDF - ERR60' end if + + + if(present(CoordinateAxisType))then + STAT_CALL = nf90_put_att(Me%ncid, VarID, '_CoordinateAxisType', CoordinateAxisType) + if(STAT_CALL /= nf90_noerr) stop 'NETCDFWriteAttributes - ModuleNETCDF - ERR70' + end if + + if(present(CoordinateZisPositive))then + STAT_CALL = nf90_put_att(Me%ncid, VarID, '_CoordinateZisPositive', CoordinateZisPositive) + if(STAT_CALL /= nf90_noerr) stop 'NETCDFWriteAttributes - ModuleNETCDF - ERR80' + end if + + end subroutine NETCDFWriteAttributes @@ -744,7 +838,7 @@ subroutine NETCDFWriteDataR4_2D (NCDFID, Name, LongName, StandardName, Units, integer, optional :: STAT !Local----------------------------------------------------------------- - real :: FillValue + real :: FillValue, MissingValue_ character(len=StringLength) :: coordinates_ integer :: STAT_, ready_ integer :: STAT_CALL @@ -791,7 +885,14 @@ subroutine NETCDFWriteDataR4_2D (NCDFID, Name, LongName, StandardName, Units, endif - FillValue = FillValueReal + FillValue = FillValueReal + MissingValue_ = FillValue + + if(present(MissingValue))then + FillValue = MissingValue + MissingValue_ = MissingValue + end if + call NETCDFWriteAttributes(VarID = VarID, & LongName = trim(LongName), & @@ -802,7 +903,7 @@ subroutine NETCDFWriteDataR4_2D (NCDFID, Name, LongName, StandardName, Units, ValidMax = ValidMax, & Minimum = MinValue, & Maximum = MaxValue, & - MissingValue = MissingValue, & + MissingValue = MissingValue_, & Positive = Positive, & coordinates = "lon lat") !exit definition mode @@ -867,7 +968,7 @@ subroutine NETCDFWriteDataR4_3D (NCDFID, Name, LongName, StandardName, Units, integer, optional :: STAT !Local----------------------------------------------------------------- - real :: FillValue + real :: FillValue, MissingValue_ character(len=StringLength) :: coordinates_ integer :: STAT_, ready_ integer :: STAT_CALL @@ -891,7 +992,14 @@ subroutine NETCDFWriteDataR4_3D (NCDFID, Name, LongName, StandardName, Units, coordinates_="lon lat" endif - FillValue = FillValueReal + FillValue = FillValueReal + MissingValue_ = FillValue + + if(present(MissingValue))then + FillValue = MissingValue + MissingValue_ = MissingValue + end if + if (STAT_CALL == nf90_enotvar)then @@ -923,7 +1031,7 @@ subroutine NETCDFWriteDataR4_3D (NCDFID, Name, LongName, StandardName, Units, ValidMax = ValidMax, & Minimum = MinValue, & Maximum = MaxValue, & - MissingValue = MissingValue, & + MissingValue = MissingValue_, & Positive = Positive, & coordinates = "lon lat") !exit definition mode @@ -952,7 +1060,7 @@ subroutine NETCDFWriteDataR4_3D (NCDFID, Name, LongName, StandardName, Units, ValidMax = ValidMax, & Minimum = MinValue, & Maximum = MaxValue, & - MissingValue = MissingValue, & + MissingValue = MissingValue_, & Positive = Positive, & coordinates = "lon lat") !exit definition mode @@ -1018,7 +1126,7 @@ subroutine NETCDFWriteDataR8_2D (NCDFID, Name, LongName, StandardName, Units, integer, optional :: STAT !Local----------------------------------------------------------------- - real :: FillValue + real :: FillValue, MissingValue_ character(len=StringLength) :: coordinates_ integer :: STAT_, ready_ integer :: STAT_CALL @@ -1042,7 +1150,13 @@ subroutine NETCDFWriteDataR8_2D (NCDFID, Name, LongName, StandardName, Units, coordinates_="lon lat" endif - FillValue = FillValueReal + FillValue = FillValueReal + MissingValue_ = FillValue + + if(present(MissingValue))then + FillValue = MissingValue + MissingValue_ = MissingValue + end if if (STAT_CALL == nf90_enotvar)then @@ -1075,7 +1189,7 @@ subroutine NETCDFWriteDataR8_2D (NCDFID, Name, LongName, StandardName, Units, ValidMax = ValidMax, & Minimum = MinValue, & Maximum = MaxValue, & - MissingValue = MissingValue, & + MissingValue = MissingValue_, & coordinates = "lon lat") !exit definition mode @@ -1139,7 +1253,7 @@ subroutine NETCDFWriteDataR8_3D (NCDFID, Name, LongName, StandardName, Units, integer, optional :: STAT !Local----------------------------------------------------------------- - real :: FillValue + real :: FillValue, MissingValue_ character(len=StringLength) :: coordinates_ integer :: STAT_, ready_ integer :: STAT_CALL @@ -1162,7 +1276,13 @@ subroutine NETCDFWriteDataR8_3D (NCDFID, Name, LongName, StandardName, Units, Dims3ID(2) = Me%Dims(2)%ID%Number !y Dims3ID(3) = Me%Dims(3)%ID%Number !z - FillValue = FillValueReal + FillValue = FillValueReal + MissingValue_ = FillValue + + if(present(MissingValue))then + FillValue = MissingValue + MissingValue_ = MissingValue + end if if (present(coordinates)) then coordinates_=coordinates @@ -1197,7 +1317,7 @@ subroutine NETCDFWriteDataR8_3D (NCDFID, Name, LongName, StandardName, Units, ValidMax = ValidMax, & Minimum = MinValue, & Maximum = MaxValue, & - MissingValue = MissingValue, & + MissingValue = MissingValue_, & coordinates = "lon lat") !exit definition mode STAT_CALL = nf90_enddef(ncid = Me%ncid) @@ -1246,6 +1366,9 @@ subroutine NETCDFWriteDataI4_2D (NCDFID, Name, LongName, StandardName, Units, ValidMin, ValidMax, MinValue, MaxValue, & MissingValue, coordinates, OutputNumber, & Array2D, STAT) + + + !Arguments------------------------------------------------------------- integer :: NCDFID @@ -1260,7 +1383,7 @@ subroutine NETCDFWriteDataI4_2D (NCDFID, Name, LongName, StandardName, Units, integer, optional :: STAT !Local----------------------------------------------------------------- - integer :: FillValue + integer :: FillValue, MissingValue_ character(len=StringLength) :: coordinates_ integer :: STAT_, ready_ integer :: STAT_CALL @@ -1287,7 +1410,13 @@ subroutine NETCDFWriteDataI4_2D (NCDFID, Name, LongName, StandardName, Units, coordinates_="lon lat" endif - FillValue = FillValueInt + FillValue = FillValueInt + MissingValue_ = FillValue + + if(present(MissingValue))then + FillValue = int(MissingValue) + MissingValue_ = int(MissingValue) + end if if (STAT_CALL == nf90_enotvar)then @@ -1313,12 +1442,12 @@ subroutine NETCDFWriteDataI4_2D (NCDFID, Name, LongName, StandardName, Units, LongName = trim(LongName), & StandardName = trim(StandardName), & Units = trim(Units), & - iFillValue = FillValueInt, & + iFillValue = FillValue, & ValidMin = ValidMin, & ValidMax = ValidMax, & Minimum = MinValue, & Maximum = MaxValue, & - MissingValue = MissingValue, & + iMissingValue = MissingValue_, & coordinates = "lon lat") !exit definition mode STAT_CALL = nf90_enddef(ncid = Me%ncid) @@ -1385,6 +1514,7 @@ subroutine NETCDFWriteDataI4_3D (NCDFID, Name, LongName, StandardName, Units, integer :: VarID integer, dimension(3) :: Dims3ID integer, dimension(4) :: Dims4ID + integer :: FillValue, MissingValue_ !Begin----------------------------------------------------------------- @@ -1406,6 +1536,14 @@ subroutine NETCDFWriteDataI4_3D (NCDFID, Name, LongName, StandardName, Units, coordinates_="lon lat" endif + FillValue = FillValueInt + MissingValue_ = FillValue + + if(present(MissingValue))then + FillValue = int(MissingValue) + MissingValue_ = int(MissingValue) + end if + if (STAT_CALL == nf90_enotvar)then !enter definition mode @@ -1429,12 +1567,12 @@ subroutine NETCDFWriteDataI4_3D (NCDFID, Name, LongName, StandardName, Units, LongName = trim(LongName), & StandardName = trim(StandardName), & Units = trim(Units), & - iFillValue = FillValueInt, & + iFillValue = FillValue, & ValidMin = ValidMin, & ValidMax = ValidMax, & Minimum = MinValue, & Maximum = MaxValue, & - MissingValue = MissingValue, & + iMissingValue = MissingValue_, & coordinates = coordinates_) !exit definition mode STAT_CALL = nf90_enddef(ncid = Me%ncid) @@ -1532,8 +1670,9 @@ subroutine NETCDFWriteTime(NCDFID, InitialDate, nInstants, Times, StartInstant, !write variable attributes call NETCDFWriteAttributes(Me%Dims(4)%VarID, Units = "seconds since "//InitialDate, & - LongName = trim(Time_Name), & - StandardName = trim(Time_Name)) + LongName = trim(Time_Name), & + StandardName = trim(Time_Name), & + Calendar = "standard") !exit definition mode STAT_CALL = nf90_enddef(ncid = Me%ncid) if(STAT_CALL /= nf90_noerr) stop 'NETCDFWriteTime - ModuleNETCDF - ERR03' @@ -2098,7 +2237,7 @@ subroutine NETCDFWriteLatLon1D(NCDFID, Lat, Lon, STAT) StandardName = "latitude", & Units = "degrees_north",& ValidMin = -90., & - ValidMax = 90., & + ValidMax = 90., & axis ="Y", & reference = "geographical coordinates, WGS84 projection") @@ -2517,19 +2656,21 @@ end subroutine NETCDFReadGrid2D !-------------------------------------------------------------------------- - subroutine NETCDFWriteVert(NCDFID, Vert, VertCoordinate, OffSet, STAT) + subroutine NETCDFWriteVert(NCDFID, Vert, VertCoordinate, SimpleGrid, OffSet, STAT) !Arguments------------------------------------------------------------- integer :: NCDFID real, dimension(: ), pointer :: Vert logical :: VertCoordinate - real, intent(in), optional :: OffSet + logical, intent(in), optional :: SimpleGrid + real, intent(in), optional :: OffSet integer, optional :: STAT !Local----------------------------------------------------------------- real :: FillValue, MissingValue integer :: STAT_, ready_ integer :: STAT_CALL + logical :: SimpleGrid_ !Begin----------------------------------------------------------------- @@ -2549,35 +2690,57 @@ subroutine NETCDFWriteVert(NCDFID, Vert, VertCoordinate, OffSet, STAT) MissingValue = FillValueReal FillValue = FillValueReal + + + if (present(SimpleGrid)) then + SimpleGrid_ = SimpleGrid + else + SimpleGrid_ = .false. + endif + + !Is it a sigma grid? if(VertCoordinate)then call NETCDFWriteAttributes(Me%Dims(3)%VarID, LongName = depth_Name, & - StandardName = depth_Name, & - Units = "", & - Positive = "down", & - FillValue = FillValue, & - ValidMin = 0., & - ValidMax = 1., & - Add_Offset = OffSet, & - MissingValue = MissingValue, & - bounds = trim(depth_Stag_Name)) + StandardName = depth_Name, & + Units = null_str, & + Positive = "down", & + FillValue = MissingValue, & + ValidMin = 0., & + ValidMax = 1., & + Add_Offset = OffSet, & + MissingValue = MissingValue, & + bounds = trim(depth_Stag_Name)) - !No? Then it must be a z-coordinate grid + !No? Then it must be a z-coordinate grid else + + if (SimpleGrid_) then - call NETCDFWriteAttributes(Me%Dims(3)%VarID, LongName = depth_Name, & - StandardName = depth_Name, & - Units = "m", & - Positive = "down", & - FillValue = FillValue, & - ValidMin = -50., & - ValidMax = 10000., & - Add_Offset = OffSet, & - MissingValue = MissingValue, & - bounds = trim(depth_Stag_Name)) - + call NETCDFWriteAttributes(Me%Dims(3)%VarID, LongName = "Depth", & + StandardName = depth_Name, & + Units = "m", & + Positive = "down", & + axis = "Z", & + CoordinateAxisType = "Height", & + CoordinateZisPositive = "down", & + bounds = trim(depth_Stag_Name)) + + else + + call NETCDFWriteAttributes(Me%Dims(3)%VarID, LongName = depth_Name, & + StandardName = depth_Name, & + Units = "m", & + Positive = "down", & + FillValue = FillValue, & + ValidMin = -50., & + ValidMax = 10000., & + Add_Offset = OffSet, & + MissingValue = MissingValue, & + bounds = trim(depth_Stag_Name)) + endif end if !exit definition mode diff --git a/Software/MOHIDBase2/ModuleTwoWay.F90 b/Software/MOHIDBase2/ModuleTwoWay.F90 index 972d86e62..62b5ba416 100644 --- a/Software/MOHIDBase2/ModuleTwoWay.F90 +++ b/Software/MOHIDBase2/ModuleTwoWay.F90 @@ -40,7 +40,7 @@ Module ModuleTwoWay public :: ConstructTwoWayHydrodynamic private :: Compute_MatrixFilterOB - public :: Allocate2WayAuxiliars_Hydrodynamic + public :: Alloc2WayAux_Hydro !Selector public :: GetTwoWayPointer @@ -92,10 +92,10 @@ Module ModuleTwoWay integer, dimension(:, : ), pointer :: JU => null() integer, dimension(:, : ), pointer :: IZ => null() integer, dimension(:, : ), pointer :: JZ => null() - real, dimension(:, :, :), pointer :: VolumeU => null() - real, dimension(:, :, :), pointer :: VolumeV => null() - real, dimension(:, :, :), pointer :: VolumeZ => null() - real, dimension(:, : ), pointer :: VolumeZ_2D => null() + real(8), dimension(:, :, :), pointer :: VolumeU => null() + real(8), dimension(:, :, :), pointer :: VolumeV => null() + real(8), dimension(:, :, :), pointer :: VolumeZ => null() + real(8), dimension(:, : ), pointer :: VolumeZ_2D => null() integer, dimension(:, :, :), pointer :: Open3D => null() integer, dimension(:, :, :), pointer :: ComputeFaces3D_U => null() integer, dimension(:, :, :), pointer :: ComputeFaces3D_V => null() @@ -374,7 +374,7 @@ end subroutine Compute_MatrixFilterOB !>@Brief !> Allocates auxiliar matrixes !>@param[in] FatherTwoWayID, TwoWayID - subroutine Allocate2WayAuxiliars_Hydrodynamic(FatherTwoWayID, TwoWayID) + subroutine Alloc2WayAux_Hydro(FatherTwoWayID, TwoWayID) !Arguments------------------------------------------------------------- integer :: FatherTwoWayID, TwoWayID @@ -396,13 +396,13 @@ subroutine Allocate2WayAuxiliars_Hydrodynamic(FatherTwoWayID, TwoWayID) WorkSize = Me%Father%WorkSize, & STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) & - stop 'ModuleTwoWay - Allocate2WayAuxiliars_Hydrodynamic - ERR01' + stop 'ModuleTwoWay - Alloc2WayAux_Hydro - ERR01' call GetHorizontalGridSize (HorizontalGridID = FatherTwoWayID, & Size = Me%Father%Size2D, & WorkSize = Me%Father%WorkSize2D, & STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ModuleTwoWay - Allocate2WayAuxiliars_Hydrodynamic - ERR02' + if (STAT_CALL /= SUCCESS_) stop 'ModuleTwoWay - Alloc2WayAux_Hydro - ERR02' ILB = Me%Father%WorkSize%ILB IUB = Me%Father%WorkSize%IUB @@ -434,10 +434,10 @@ subroutine Allocate2WayAuxiliars_Hydrodynamic(FatherTwoWayID, TwoWayID) endif else - stop 'ModuleTwoWay - Allocate2WayAuxiliars_Hydrodynamic - ERR03' + stop 'ModuleTwoWay - Alloc2WayAux_Hydro - ERR03' endif - end subroutine Allocate2WayAuxiliars_Hydrodynamic + end subroutine Alloc2WayAux_Hydro !------------------------------------------------------------------------- @@ -791,11 +791,11 @@ end subroutine PrepTwoWay !>@param[in] Volume_3D, Volume_2D, VelocityID, InterpolMethod subroutine ComputeAuxMatrixes(Volume_3D, Volume_2D, VelocityID, InterpolMethod, Ilink, Jlink) !Arguments------------------------------------------------------------- - integer, intent(IN) :: interpolMethod - real, dimension(:, :, :), pointer, optional :: Volume_3D - real, dimension(:, :), pointer, optional :: Volume_2D - integer, dimension(:, :), pointer :: Ilink, Jlink - integer, optional :: VelocityID + integer, intent(IN) :: interpolMethod + real(8), dimension(:, :, :), pointer, optional :: Volume_3D + real(8), dimension(:, :), pointer, optional :: Volume_2D + integer, dimension(:, :), pointer :: Ilink, Jlink + integer, optional :: VelocityID !Local----------------------------------------------------------------- !---------------------------------------------------------------------- @@ -857,8 +857,8 @@ end subroutine ComputeAuxMatrixes subroutine ComputeSonVolInFather (Volume_3D, Volume_2D, Ilink, Jlink, SonComputeFaces) !Arguments-------------------------------------------------------------------------------- - real, dimension(:, :, :), pointer, optional :: Volume_3D - real, dimension(:, :), pointer, optional :: Volume_2D + real(8), dimension(:, :, :), pointer, optional :: Volume_3D + real(8), dimension(:, :), pointer, optional :: Volume_2D integer, dimension(:, :), pointer :: Ilink, Jlink integer, dimension(:, :, :), pointer, optional :: SonComputeFaces !Local variables-------------------------------------------------------------------------- diff --git a/Software/MOHIDLand/ModuleRunOff.F90 b/Software/MOHIDLand/ModuleRunOff.F90 index 83b4c915c..fdf0af371 100644 --- a/Software/MOHIDLand/ModuleRunOff.F90 +++ b/Software/MOHIDLand/ModuleRunOff.F90 @@ -95,7 +95,6 @@ Module ModuleRunOff public :: GetManning public :: GetManningDelta public :: GetFlowToChannels - !public :: GetFlowAtBoundary public :: GetBoundaryImposed public :: GetRouteDFour public :: GetRouteDFourCells @@ -229,7 +228,8 @@ Module ModuleRunOff integer, dimension(:,:), pointer :: BasinPoints => null() real(8), dimension(:,:), pointer :: WaterColumn => null() real , dimension(:,:), pointer :: GridCellArea => null() - real , dimension(:,:), pointer :: DUX, DVY => null() + real , dimension(:,:), pointer :: DUX, DUY => null() + real , dimension(:,:), pointer :: DVX, DVY => null() real , dimension(:,:), pointer :: DXX, DYY => null() real , dimension(:,:), pointer :: DZX, DZY => null() real , dimension(:,:), pointer :: XX2D_Z, YY2D_Z => null() @@ -319,9 +319,14 @@ Module ModuleRunOff real(8), dimension(:,:), pointer :: iFlowX, iFlowY => null() !Integrated OverLandFlow (AfterSumDT) real(8), dimension(:,:), pointer :: FlowXOld, FlowYOld => null() !Flow From previous iteration real(8), dimension(:,:), pointer :: InitialFlowX, InitialFlowY => null() !Initial Flow of convergence + real(8), dimension(:,:), pointer :: VelModFaceU, VelModFaceV => null() !Flow From previous iteration real, dimension(:,:), pointer :: AreaU, AreaV => null() integer, dimension(:,:), pointer :: ComputeFaceU => null() integer, dimension(:,:), pointer :: ComputeFaceV => null() + integer, dimension(:,:), pointer :: ComputeAdvectionU => null() + integer, dimension(:,:), pointer :: ComputeAdvectionV => null() + real, dimension(:,:), pointer :: NoAdvectionPoints => null() + integer, dimension(:,:), pointer :: OpenPoints => null() !Mask for gridcells above min watercolumn real, dimension(:,:), pointer :: OverLandCoefficient => null() !Manning or Chezy real, dimension(:,:), pointer :: OverLandCoefficientDelta => null() !For erosion/deposition real, dimension(:,:), pointer :: OverLandCoefficientX => null() !Manning or Chezy @@ -354,7 +359,7 @@ Module ModuleRunOff integer, dimension(:,:), pointer :: LowestNeighborJ => null() !Lowest Neighbor in the surroundings integer, dimension(:,:), pointer :: DFourSinkPoint => null() !Point which can't drain with in X/Y only integer, dimension(:,:), pointer :: StabilityPoints => null() !Points where models check stability - type(T_PropertyID) :: OverLandCoefficientID + type(T_PropertyID) :: OverLandCoefficientID, NoAdvectionZonesID logical :: StormWaterModel = .false. !If connected to SWMM real, dimension(:,:), pointer :: StormWaterEffectiveFlow => null() !Flow from SWMM (inflow + outflow) real, dimension(:,:), pointer :: StreetGutterPotentialFlow=> null() !Potential flow to street gutters @@ -381,6 +386,9 @@ Module ModuleRunOff ! real :: StabilizeHardCutLimit = 0.1 integer :: HydrodynamicApproximation = DiffusionWave_ logical :: CalculateAdvection = .true. + logical :: NoAdvectionZones = .false. + logical :: CalculateDiffusion = .false. + real :: Viscosity_Coef = null_real logical :: CalculateCellMargins = .true. logical :: ImposeMaxVelocity = .false. real :: ImposedMaxVelocity = 0.1 @@ -686,7 +694,7 @@ subroutine ReadDataFile !Initial Water Column call GetData(dummy, & - Me%ObjEnterData, iflag, & + Me%ObjEnterData, iflag, & SearchType = FromFile, & keyword = 'INITIAL_WATER_COLUMN', & default = 0.0, & @@ -695,7 +703,7 @@ subroutine ReadDataFile if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR050' if (iflag /= 0) then - write(*,*)'The keyword INITIAL_WATER_COLUMN is obselete.' + write(*,*)'The keyword INITIAL_WATER_COLUMN is obsolete.' write(*,*)'Please use the block / ' stop 'ReadDataFile - ModuleRunOff - ERR060' endif @@ -720,9 +728,14 @@ subroutine ReadDataFile if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR080' call KillFillMatrix(InitialWaterColumnID%ObjFillMatrix, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR090' + if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR081' Me%PresentInitialWaterColumn = .true. + + call Block_Unlock(Me%ObjEnterData, ClientNumber, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR090' + + else @@ -749,6 +762,9 @@ subroutine ReadDataFile Me%PresentInitialWaterLevel = .true. + call Block_Unlock(Me%ObjEnterData, ClientNumber, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR094' + else write(*,*) write(*,*)'Missing Block / ' @@ -759,7 +775,7 @@ subroutine ReadDataFile !Gets Minimum Slope call GetData(Me%MinSlope, & - Me%ObjEnterData, iflag, & + Me%ObjEnterData, iflag, & SearchType = FromFile, & keyword = 'MIN_SLOPE', & default = 0.0, & @@ -805,7 +821,7 @@ subroutine ReadDataFile !Gets if advection is to be calculated call GetData(Me%CalculateAdvection, & - Me%ObjEnterData, iflag, & + Me%ObjEnterData, iflag, & SearchType = FromFile, & keyword = 'ADVECTION', & default = .true., & @@ -818,30 +834,60 @@ subroutine ReadDataFile !Minimum Water Column for advection computation call GetData(Me%MinimumWaterColumnAdvection, & - Me%ObjEnterData, iflag, & + Me%ObjEnterData, iflag, & SearchType = FromFile, & keyword = 'MIN_WATER_COLUMN_ADVECTION', & default = 0.0, & ClientModule = 'ModuleRunOff', & STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR0170' + + + call GetData(Me%NoAdvectionZones, & + Me%ObjEnterData, iflag, & + SearchType = FromFile, & + keyword = 'NO_ADVECTION_ZONES', & + default = .false., & + ClientModule = 'ModuleRunOff', & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR0170a' + + if(Me%NoAdvectionZones)then + + call ConstructAdvectionZones + + else + + call SetMatrixValue(Me%ComputeAdvectionU, Me%Size, 1) + call SetMatrixValue(Me%ComputeAdvectionU, Me%Size, 1) + + endif + + else + + call SetMatrixValue(Me%ComputeAdvectionU, Me%Size, 0) + call SetMatrixValue(Me%ComputeAdvectionU, Me%Size, 0) + endif + endif + + !Method for computing water column in the face (1 - Using max level and max bottom; !2- using max level and average of bottom) call GetData(Me%FaceWaterColumn, & - Me%ObjEnterData, iflag, & + Me%ObjEnterData, iflag, & keyword = 'WATER_COLUMN_FACE', & ClientModule = 'ModuleRunOff', & SearchType = FromFile, & Default = WCMaxBottom_, & STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR171' + if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR175' if (Me%FaceWaterColumn /= WCMaxBottom_ .and. Me%FaceWaterColumn /= WCAverageBottom_) then write(*,*) 'Unknown option for WATER_COLUMN_FACE' - stop 'ReadDataFile - ModuleRunOff - ERR172' + stop 'ReadDataFile - ModuleRunOff - ERR176' endif if (Me%FaceWaterColumn == WCMaxBottom_) then @@ -907,7 +953,6 @@ subroutine ReadDataFile Me%ObjEnterData, iflag, & SearchType = FromFile, & keyword = 'MIN_WATER_COLUMN', & -! default = 0.001, & ClientModule = 'ModuleRunOff', & STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR220' @@ -940,195 +985,7 @@ subroutine ReadDataFile ClientModule = 'ModuleBasin', & STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR260' -! -! !Factor for DT Prediction -! call GetData(Me%DTFactor, & -! Me%ObjEnterData, iflag, & -! keyword = 'DT_FACTOR', & -! ClientModule = 'ModuleRunOff', & -! SearchType = FromFile, & -! Default = 1.05, & -! STAT = STAT_CALL) -! if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR270' -! -! if (Me%DTFactor <= 1.0) then -! write (*,*)'Invalid DT Factor [DT_FACTOR]' -! write (*,*)'Value must be greater then 1.0' -! stop 'ReadDataFile - ModuleRunOff - ERR275' -! endif -! -! call GetData(Me%CV%DTFactorUp, & -! Me%ObjEnterData, iflag, & -! keyword = 'DT_FACTOR_UP', & -! ClientModule = 'ModuleRunOff', & -! SearchType = FromFile, & -! Default = Me%DTFactor, & -! STAT = STAT_CALL) -! if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR280' -! if (iflag /= 1) then -! write(*,*) 'Assumed a value of ', Me%DTFactor, ' for RunOff DT_FACTOR_UP' -! endif -! if (Me%DTFactorUp <= 1.0) then -! write (*,*)'Invalid DT Factor Up [DT_FACTOR_UP]' -! write (*,*)'Value must be greater then 1.0' -! stop 'ReadDataFile - ModuleRunOff - ERR281' -! endif -! -! call GetData(Me%CV%DTFactorDown, & -! Me%ObjEnterData, iflag, & -! keyword = 'DT_FACTOR_DOWN', & -! ClientModule = 'ModuleRunOff', & -! SearchType = FromFile, & -! Default = Me%DTFactor, & -! STAT = STAT_CALL) -! if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR285' -! if (iflag /= 1) then -! write(*,*) 'Assumed a value of ', Me%DTFactor, ' for RunOff DT_FACTOR_DOWN' -! endif -! if (Me%DTFactorDown <= 1.0) then -! write (*,*)'Invalid DT Factor Down [DT_FACTOR_DOWN]' -! write (*,*)'Value must be greater then 1.0' -! stop 'ReadDataFile - ModuleRunOff - ERR286' -! endif -! -! call GetData(Me%CV%MaxIterations, & -! Me%ObjEnterData, iflag, & -! keyword = 'MAX_ITERATIONS', & -! ClientModule = 'ModuleRunOff', & -! SearchType = FromFile, & -! Default = 5, & -! STAT = STAT_CALL) -! if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR310' - -! !Stabilize Solution -! call GetData(Me%CV%Stabilize, & -! Me%ObjEnterData, iflag, & -! keyword = 'STABILIZE', & -! ClientModule = 'ModuleRunOff', & -! SearchType = FromFile, & -! Default = .true., & -! STAT = STAT_CALL) -! if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR290' - -! if (Me%Stabilize) then -! call GetData(Me%CV%StabilizeFactor, & -! Me%ObjEnterData, iflag, & -! keyword = 'STABILIZE_FACTOR', & -! ClientModule = 'ModuleRunOff', & -! SearchType = FromFile, & -! Default = 0.1, & -! STAT = STAT_CALL) -! if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR300' -! -! !Minimum Water Column for checking stabilize -! call GetData(Me%MinimumWaterColumnStabilize, & -! Me%ObjEnterData, iflag, & -! SearchType = FromFile, & -! keyword = 'MIN_WATER_COLUMN_STABILIZE', & -! default = Me%MinimumWaterColumn, & -! ClientModule = 'ModuleRunOff', & -! STAT = STAT_CALL) -! if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR301' -! -! !Minimum Water Column for checking stabilize -! call GetData(dummy, & -! Me%ObjEnterData, iflag, & -! SearchType = FromFile, & -! keyword = 'STABILIZE_HARD_CUT_FACTOR', & -! default = 0.1, & -! ClientModule = 'ModuleRunOff', & -! STAT = STAT_CALL) -! if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR302' -! if (dummy <= 0.0 .or. dummy > 1.0) stop 'ReadDataFile - ModuleRunOff - ERR303' -! Me%CV%StabilizeHardCutLimit = dummy * Me%MaxIterations -! endif -! -! !Internal Time Step Split -! call GetData(Me%InternalTimeStepSplit, & -! Me%ObjEnterData, iflag, & -! keyword = 'DT_SPLIT_FACTOR', & -! ClientModule = 'ModuleRunOff', & -! SearchType = FromFile, & -! Default = 1.25, & -! STAT = STAT_CALL) -! if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR311' -! if (Me%InternalTimeStepSplit <= 1.0) then -! write (*,*)'Invalid DT Factor [DT_SPLIT_FACTOR]' -! write (*,*)'Value must be greater then 1.0' -! stop 'ReadDataFile - ModuleRunOff - ERR312' -! endif -! -! call GetData(Me%MinIterations, & -! Me%ObjEnterData, iflag, & -! keyword = 'MIN_ITERATIONS', & -! ClientModule = 'ModuleRunOff', & -! SearchType = FromFile, & -! Default = 1, & -! STAT = STAT_CALL) -! if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR313' -! if (Me%MinIterations < 1) then -! write (*,*) 'MIN_ITERATIONS must be greater or equal to 1' -! stop 'ReadDataFile - ModuleRunOff - ERR313a' -! endif -! -! call GetData(dummy, & -! Me%ObjEnterData, iflag, & -! keyword = 'PERCENT_TO_RESTART', & -! ClientModule = 'ModuleRunOff', & -! SearchType = FromFile, & -! Default = 0., & -! STAT = STAT_CALL) -! if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR313b' -! if (dummy <= 0.) then -! Me%MinToRestart = 0 -! else -! call CountBasinPoints(dummy) -! endif -! -! call GetData(Me%CheckDecreaseOnly, & -! Me%ObjEnterData, iflag, & -! keyword = 'CHECK_DEC_ONLY', & -! ClientModule = 'ModuleRunOff', & -! SearchType = FromFile, & -! Default = .false., & -! STAT = STAT_CALL) -! if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR314' -! -! !Gets flag of DT is limited by the courant number -! call GetData(Me%CV%LimitDTCourant, & -! Me%ObjEnterData, iflag, & -! keyword = 'LIMIT_DT_COURANT', & -! ClientModule = 'ModuleRunOff', & -! SearchType = FromFile, & -! Default = .false., & -! STAT = STAT_CALL) -! if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR320' -! -! if (Me%LimitDTCourant) then -! -! !Gets Maximum allowed Courant Number -! call GetData(Me%MaxCourant, & -! Me%ObjEnterData, iflag, & -! keyword = 'MAX_COURANT', & -! ClientModule = 'ModuleRunOff', & -! SearchType = FromFile, & -! Default = 1.0, & -! STAT = STAT_CALL) -! if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR330' -! -! endif -! -! !Gets flag of DT is limited by the volume variation -! call GetData(Me%LimitDTVariation, & -! Me%ObjEnterData, iflag, & -! keyword = 'LIMIT_DT_VARIATION', & -! ClientModule = 'ModuleRunOff', & -! SearchType = FromFile, & -! Default = .true., & -! STAT = STAT_CALL) -! if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR340' -! - + !Impose Boundary Value call GetData(Me%ImposeBoundaryValue, & Me%ObjEnterData, iflag, & @@ -1140,19 +997,6 @@ subroutine ReadDataFile if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR350' if (Me%ImposeBoundaryValue) then - !moved to after seeing if some station exists -! call GetData(Me%BoundaryValue, & -! Me%ObjEnterData, iflag, & -! keyword = 'BOUNDARY_VALUE', & -! ClientModule = 'ModuleRunOff', & -! SearchType = FromFile, & -! STAT = STAT_CALL) -! if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR360' -! -! if (iflag == 0) then -! write(*,*)'BOUNDARY_VALUE must be defined in module Runoff' -! stop 'ReadDataFile - ModuleRunOff - ERR0361' -! endif !verify if the user wants to allow water to go in the domain (true) if !boundary level higher than water level or not (false) and the level imposed @@ -1166,38 +1010,10 @@ subroutine ReadDataFile STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR363' - - call ReadBoundaryConditions(ClientNumber) + call ReadBoundaryConditions endif - ! this keywords were removed because two methods create instabilities and - ! negative volumes (instanataneous mixing method 1 and 3) and because - ! method 4 is just the same as 2 just the maxflow is different (based on - ! instant mixing) that is not justified (instantaneous = instabilities) - ! This is left just for debugging -! call GetData(Me%OverlandChannelInteractionMethod, & -! Me%ObjEnterData, iflag, & -! keyword = 'OVERLAND_CHANNEL_INTERACTION_METHOD', & -! ClientModule = 'ModuleRunOff', & -! SearchType = FromFile, & -! Default = 1, & -! STAT = STAT_CALL) -! if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR364' -! if (iflag == 0) then -! call GetData(Me%OverlandChannelInteractionMethod, & -! Me%ObjEnterData, iflag, & -! keyword = 'CHANNEL_LINK_METHOD', & -! ClientModule = 'ModuleRunOff', & -! SearchType = FromFile, & -! Default = 1, & -! STAT = STAT_CALL) -! if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR365' -! else -! write (*,*) 'OVERLAND_CHANNEL_INTERACTION_METHOD keyword is deprecated.' -! write (*,*) 'Use CHANNEL_LINK_METHOD instead.' -! stop 'ReadDataFile - ModuleRunOff - ERR366' -! endif !Discharges call GetData(Me%Discharges, & @@ -1263,9 +1079,7 @@ subroutine ReadDataFile Default = .false., & STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR380' - - - + !Routes D4 Points call GetData(Me%RouteDFourPoints, & Me%ObjEnterData, iflag, & @@ -1426,14 +1240,14 @@ subroutine ReadDataFile if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR0470' !Gets Block for OverLand Coef - call ExtractBlockFromBuffer(Me%ObjEnterData, ClientNumber, & - '', & - '', BlockFound, & + call ExtractBlockFromBuffer(Me%ObjEnterData, ClientNumber, & + '', & + '', BlockFound, & STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR0480' if (BlockFound) then call ConstructFillMatrix ( PropertyID = Me%OverLandCoefficientID, & - EnterDataID = Me%ObjEnterData, & + EnterDataID = Me%ObjEnterData, & TimeID = Me%ObjTime, & HorizontalGridID = Me%ObjHorizontalGrid, & ExtractType = FromBlock, & @@ -1445,6 +1259,10 @@ subroutine ReadDataFile call KillFillMatrix(Me%OverLandCoefficientID%ObjFillMatrix, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR0500' + + call Block_Unlock(Me%ObjEnterData, ClientNumber, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR0501' + !Check that manning values entered are not zero or negative @@ -1498,6 +1316,10 @@ subroutine ReadDataFile call KillFillMatrix(OverLandCoefficientDeltaID%ObjFillMatrix, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR0550' + + call Block_Unlock(Me%ObjEnterData, ClientNumber, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR0551' + !Check that final manning values are not zero or negative do j = Me%Size%JLB, Me%Size%JUB @@ -1534,15 +1356,15 @@ subroutine ReadDataFile if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR570' !Gets Flag with Sewer Points - call ExtractBlockFromBuffer(Me%ObjEnterData, ClientNumber, & + call ExtractBlockFromBuffer(Me%ObjEnterData, ClientNumber, & '', & '', BlockFound, & STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR580' if (BlockFound) then - call ConstructFillMatrix ( PropertyID = StormWaterDrainageID, & - EnterDataID = Me%ObjEnterData, & + call ConstructFillMatrix ( PropertyID = StormWaterDrainageID, & + EnterDataID = Me%ObjEnterData, & TimeID = Me%ObjTime, & HorizontalGridID = Me%ObjHorizontalGrid, & ExtractType = FromBlock, & @@ -1554,6 +1376,9 @@ subroutine ReadDataFile call KillFillMatrix(StormWaterDrainageID%ObjFillMatrix, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR600' + + call Block_Unlock(Me%ObjEnterData, ClientNumber, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR0601' else write(*,*)'Missing Block / ' @@ -1571,26 +1396,30 @@ subroutine ReadDataFile if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR620' !Gets Flag with Sewer Points - call ExtractBlockFromBuffer(Me%ObjEnterData, ClientNumber, & + call ExtractBlockFromBuffer(Me%ObjEnterData, ClientNumber, & '', & '', BlockFound, & STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR630' if (BlockFound) then - call ConstructFillMatrix ( PropertyID = BuildingsHeightID, & - EnterDataID = Me%ObjEnterData, & + call ConstructFillMatrix ( PropertyID = BuildingsHeightID, & + EnterDataID = Me%ObjEnterData, & TimeID = Me%ObjTime, & HorizontalGridID = Me%ObjHorizontalGrid, & ExtractType = FromBlock, & PointsToFill2D = Me%ExtVar%BasinPoints, & - Matrix2D = Me%BuildingsHeight, & + Matrix2D = Me%BuildingsHeight, & TypeZUV = TypeZ_, & STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR640' call KillFillMatrix(BuildingsHeightID%ObjFillMatrix, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR650' + + call Block_Unlock(Me%ObjEnterData, ClientNumber, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR0651' + else write(*,*)'Missing Block / ' @@ -1634,14 +1463,18 @@ subroutine ReadDataFile call KillFillMatrix(NumberOfSewerStormWaterNodesID%ObjFillMatrix, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR692' + + call Block_Unlock(Me%ObjEnterData, ClientNumber, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR0693' + else write(*,*)'Missing Block / ' - stop 'ReadDataFile - ModuleRunOff - ERR693' + stop 'ReadDataFile - ModuleRunOff - ERR694' endif call RewindBuffer (Me%ObjEnterData, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR693' + if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR695' !Look for keyword to filter SWMM nodes (regular expresion on node names) that can recieve MOHID Land flow (e.g. pluvial !nodes) This can only be used in conjunction with / @@ -1740,6 +1573,10 @@ subroutine ReadDataFile call KillFillMatrix(NumberOfStormWaterNodesID%ObjFillMatrix, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR696' + call Block_Unlock(Me%ObjEnterData, ClientNumber, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR0697' + + !NumberOfStormWaterNodes points can only be <= NumberOfSewerStormWaterNodes points call VerifyStreetGutterInteraction @@ -1781,6 +1618,10 @@ subroutine ReadDataFile call KillFillMatrix(StreetGutterLengthID%ObjFillMatrix, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR710' + + call Block_Unlock(Me%ObjEnterData, ClientNumber, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadDataFile - ModuleRunOff - ERR0710.1' + else write(*,*)'Missing Block / ' @@ -2358,14 +2199,15 @@ end subroutine CheckBoundaryCells !-------------------------------------------------------------------------- - subroutine ReadBoundaryConditions(ClientNumber) + subroutine ReadBoundaryConditions !Arguments------------------------------------------------------------- - integer :: ClientNumber !Local----------------------------------------------------------------- integer :: iflag, STAT_CALL logical :: BlockFound + integer :: ClientNumber + !Begin----------------------------------------------------------------- @@ -2434,6 +2276,11 @@ subroutine ReadBoundaryConditions(ClientNumber) endif + call Block_Unlock(Me%ObjEnterData, ClientNumber, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadBoundaryConditions - ModuleRunoff - ERR0130' + + + end subroutine ReadBoundaryConditions !-------------------------------------------------------------------------- @@ -3018,7 +2865,7 @@ subroutine Construct_Time_Serie_Discharge enddo enddo - Extension = 'fds' + Extension = 'srd' do dis = 1, Me%OutPut%DischargesNumber @@ -3072,6 +2919,8 @@ subroutine AllocateVariables allocate(Me%myWaterLevel (Me%Size%ILB:Me%Size%IUB,Me%Size%JLB:Me%Size%JUB)) allocate(Me%myWaterColumn (Me%Size%ILB:Me%Size%IUB,Me%Size%JLB:Me%Size%JUB)) + + allocate(Me%myWaterColumnAfterTransport (Me%Size%ILB:Me%Size%IUB,Me%Size%JLB:Me%Size%JUB)) allocate(Me%myWaterVolumePred (Me%Size%ILB:Me%Size%IUB,Me%Size%JLB:Me%Size%JUB)) Me%myWaterVolumePred = null_real @@ -3103,9 +2952,13 @@ subroutine AllocateVariables allocate(Me%AreaV (Me%Size%ILB:Me%Size%IUB,Me%Size%JLB:Me%Size%JUB)) allocate(Me%ComputeFaceU (Me%Size%ILB:Me%Size%IUB,Me%Size%JLB:Me%Size%JUB)) allocate(Me%ComputeFaceV (Me%Size%ILB:Me%Size%IUB,Me%Size%JLB:Me%Size%JUB)) - - - + allocate(Me%OpenPoints (Me%Size%ILB:Me%Size%IUB,Me%Size%JLB:Me%Size%JUB)) + allocate(Me%NoAdvectionPoints (Me%Size%ILB:Me%Size%IUB,Me%Size%JLB:Me%Size%JUB)) + allocate(Me%ComputeAdvectionU (Me%Size%ILB:Me%Size%IUB,Me%Size%JLB:Me%Size%JUB)) + allocate(Me%ComputeAdvectionV (Me%Size%ILB:Me%Size%IUB,Me%Size%JLB:Me%Size%JUB)) + allocate(Me%VelModFaceU (Me%Size%ILB:Me%Size%IUB,Me%Size%JLB:Me%Size%JUB)) + allocate(Me%VelModFaceV (Me%Size%ILB:Me%Size%IUB,Me%Size%JLB:Me%Size%JUB)) + Me%iFlowX = 0.0 Me%iFlowY = 0.0 Me%lFlowX = 0.0 @@ -3114,10 +2967,18 @@ subroutine AllocateVariables Me%FlowYOld = 0.0 Me%InitialFlowX = 0.0 Me%InitialFlowY = 0.0 - Me%AreaU = 0.0 - Me%AreaV = 0.0 + Me%AreaU = AlmostZero + Me%AreaV = AlmostZero Me%ComputeFaceU = 0 Me%ComputeFaceV = 0 + Me%OpenPoints = 0 + + Me%NoAdvectionPoints = 0.0 + Me%ComputeAdvectionU = 1 + Me%ComputeAdvectionV = 1 + + Me%VelModFaceU = 0.0 + Me%VelModFaceV = 0.0 allocate(Me%OverLandCoefficient (Me%Size%ILB:Me%Size%IUB,Me%Size%JLB:Me%Size%JUB)) allocate(Me%OverLandCoefficientDelta (Me%Size%ILB:Me%Size%IUB,Me%Size%JLB:Me%Size%JUB)) @@ -3127,7 +2988,8 @@ subroutine AllocateVariables Me%OverLandCoefficientDelta = null_real Me%OverLandCoefficientX = null_real Me%OverLandCoefficientY = null_real - + + allocate (Me%CenterFlowX (Me%Size%ILB:Me%Size%IUB, Me%Size%JLB:Me%Size%JUB)) allocate (Me%CenterFlowY (Me%Size%ILB:Me%Size%IUB, Me%Size%JLB:Me%Size%JUB)) @@ -3211,6 +3073,115 @@ subroutine ConstructOverLandCoefficient end subroutine ConstructOverLandCoefficient + + !-------------------------------------------------------------------------- + + subroutine ConstructAdvectionZones + + !Arguments------------------------------------------------------------- + + !Local----------------------------------------------------------------- + integer :: ILB, IUB, JLB, JUB + integer :: i, j, STAT_CALL, ClientNumber + logical :: BlockFound + + if(Me%NoAdvectionZones)then + + call RewindBuffer (Me%ObjEnterData, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ConstructAdvectionZones - ModuleRunOff - ERR01' + + !Gets Block for OverLand Coef + call ExtractBlockFromBuffer(Me%ObjEnterData, ClientNumber, & + '', & + '', BlockFound, & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ConstructAdvectionZones - ModuleRunOff - ERR02' + + if (BlockFound) then + call ConstructFillMatrix ( PropertyID = Me%NoAdvectionZonesID, & + EnterDataID = Me%ObjEnterData, & + TimeID = Me%ObjTime, & + HorizontalGridID = Me%ObjHorizontalGrid, & + ExtractType = FromBlock, & + PointsToFill2D = Me%ExtVar%BasinPoints, & + Matrix2D = Me%NoAdvectionPoints, & + TypeZUV = TypeZ_, & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ConstructAdvectionZones - ModuleRunOff - ERR03' + + call KillFillMatrix(Me%NoAdvectionZonesID%ObjFillMatrix, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) then + write(*,*)"STAT_CALL = ", STAT_CALL + stop 'ConstructAdvectionZones - ModuleRunOff - ERR04' + endif + + call Block_Unlock(Me%ObjEnterData, ClientNumber, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ConstructAdvectionZones - ModuleRunOff - ERR04' + + + endif + + !Check that advection zones are 0 or 1. + do j = Me%Size%JLB, Me%Size%JUB + do i = Me%Size%ILB, Me%Size%IUB + + if (Me%ExtVar%BasinPoints(i, j) == BasinPoint) then + + if (int(Me%NoAdvectionPoints(i,j)) .lt. 0) then + write(*,*) 'No Advection Zones can only be 0 or 1' + write(*,*) 'in cell', i, j, Me%NoAdvectionPoints(i,j), int(Me%NoAdvectionPoints(i,j)) + stop 'ConstructAdvectionZones - ModuleRunoff - ERR05' + endif + + if (int(Me%NoAdvectionPoints(i,j)) .gt. 1) then + write(*,*) 'No Advection Zones can only be 0 or 1' + write(*,*) 'in cell', i, j, Me%NoAdvectionPoints(i,j), int(Me%NoAdvectionPoints(i,j)) + stop 'ConstructAdvectionZones - ModuleRunoff - ERR06' + endif + + endif + + enddo + enddo + + else + write(*,*)'Missing Block / ' + stop 'ConstructAdvectionZones - ModuleRunoff - ERR07' + endif + + + !Bounds + ILB = Me%WorkSize%ILB + IUB = Me%WorkSize%IUB + + JLB = Me%WorkSize%JLB + JUB = Me%WorkSize%JUB + + !TODO: OpenMP - Missing implementation + do j = JLB, JUB + 1 + do i = ILB, IUB + if (Me%ExtVar%BasinPoints(i, j) + Me%ExtVar%BasinPoints(i, j-1) == 2) then !Two Basin Points + if (int(Me%NoAdvectionPoints(i, j) + Me%NoAdvectionPoints(i, j-1)) == 2) then + Me%ComputeAdvectionU(i, j) = 0 + endif + endif + enddo + enddo + + do j = JLB, JUB + do i = ILB, IUB + 1 + if (Me%ExtVar%BasinPoints(i, j) + Me%ExtVar%BasinPoints(i-1, j) == 2) then !Two Basin Points + if ((Me%NoAdvectionPoints(i, j) + Me%NoAdvectionPoints(i-1, j)) == 2) then + Me%ComputeAdvectionV(i, j) = 0 + endif + endif + enddo + enddo + + deallocate(Me%NoAdvectionPoints) + nullify(Me%NoAdvectionPoints) + + end subroutine ConstructAdvectionZones !-------------------------------------------------------------------------- @@ -4857,6 +4828,7 @@ subroutine ModifyRunOff(RunOffID, STAT) case (DiffusionWave_) call KinematicWave () !Slope based on surface case (DynamicWave_) + call ComputeFaceVelocityModulus call DynamicWaveXX (Me%CV%CurrentDT) !Consider Advection, Friction and Pressure call DynamicWaveYY (Me%CV%CurrentDT) end select @@ -4923,14 +4895,27 @@ subroutine ModifyRunOff(RunOffID, STAT) endif - !Calculates flow from channels to land - if (Me%ObjDrainageNetwork /= 0 .and. .not. Me%SimpleChannelInteraction) then - call FlowFromChannels + if (Me%ObjDrainageNetwork /= 0) then + + if (Me%SimpleChannelInteraction) then + !One method which is not simple anymore + call OverLandChannelInteraction_5 + else + !Calculates flow from channels to land -> First ever implement approach + call FlowFromChannels + endif endif + !Calculates flow from channels to land +! if (Me%ObjDrainageNetwork /= 0 .and. .not. Me%SimpleChannelInteraction) then +! call FlowFromChannels +! endif + !Calculates flow from channels to land and the other way round. New approach - if (Me%ObjDrainageNetwork /=0 .and. Me%SimpleChannelInteraction) then - call OverLandChannelInteraction_2 +! if (Me%ObjDrainageNetwork /=0 .and. Me%SimpleChannelInteraction) then +! call OverLandChannelInteraction_2 + +! if (Me%ObjDrainageNetwork /=0) then ! .and. Me%LargeRiverInteraction) then ! !call OverLandChannelInteraction_New ! select case (Me%OverlandChannelInteractionMethod) @@ -4945,7 +4930,7 @@ subroutine ModifyRunOff(RunOffID, STAT) ! case default ! stop 'ModifyRunOff - ModuleRunOff - ERR020' ! endselect - endif +! endif !Routes Ponded levels which occour due to X/Y direction (Runoff does not route in D8) !the defaul method was celerity (it was corrected) but it ccould create high flow changes. Manning method is stabler @@ -5268,7 +5253,7 @@ subroutine ModifyWaterDischarges (LocalDT) AuxFlowIJ = (- StabilizeFactor * Me%myWaterVolumeOld(i, j) - DV) / LocalDT endif endif - write(*,*) 'Flow in cell',i,j,'was correct from ',AuxFlow,'to ',AuxFlowIJ + write(*,*) 'Flow in cell',i,j,'was corrected from ',AuxFlow,'to ',AuxFlowIJ endif endif endif @@ -5300,7 +5285,7 @@ subroutine ModifyWaterDischarges (LocalDT) AuxFlowIJ = ( StabilizeFactor * Me%myWaterVolumeOld(ib, jb) + DV) / LocalDT endif endif - write(*,*) 'Flow in cell',i,j,'was correct from ',AuxFlow,'to ',AuxFlowIJ + write(*,*) 'Flow in cell',i,j,'was corrected from ',AuxFlow,'to ',AuxFlowIJ endif endif endif @@ -5420,10 +5405,10 @@ subroutine ModifyGeometryAndMapping endif !Water Column Left (above MaxBottom) - WCL = max(Me%myWaterLevel(i, j-1) + Me%BuildingsHeight(i, j-1) - Bottom, dble(0.0)) + WCL = max(Me%myWaterLevel(i, j-1) + Me%BuildingsHeight(i, j-1) - Bottom, dble(AlmostZero)) !Water Column Right (above MaxBottom) - WCR = max(Me%myWaterLevel(i, j ) + Me%BuildingsHeight(i, j) - Bottom, dble(0.0)) + WCR = max(Me%myWaterLevel(i, j ) + Me%BuildingsHeight(i, j) - Bottom, dble(AlmostZero)) !In the case of kinematic wave, always consider the "upstream" area, otherwise the average above "max bottom" if (Me%HydrodynamicApproximation == KinematicWave_) then @@ -5473,10 +5458,10 @@ subroutine ModifyGeometryAndMapping endif !Water Column Left - WCL = max(Me%myWaterLevel(i-1, j) + Me%BuildingsHeight(i-1, j) - Bottom, dble(0.0)) + WCL = max(Me%myWaterLevel(i-1, j) + Me%BuildingsHeight(i-1, j) - Bottom, dble(AlmostZero)) !Water Column Right - WCR = max(Me%myWaterLevel(i, j ) + Me%BuildingsHeight(i, j) - Bottom, dble(0.0)) + WCR = max(Me%myWaterLevel(i, j ) + Me%BuildingsHeight(i, j) - Bottom, dble(AlmostZero)) !In the case of kinematic wave, always consider the "upstream" area, otherwise the average above "max bottom" if (Me%HydrodynamicApproximation == KinematicWave_) then @@ -5510,8 +5495,22 @@ subroutine ModifyGeometryAndMapping enddo enddo !$OMP END DO NOWAIT - !$OMP END PARALLEL + !$OMP DO SCHEDULE(DYNAMIC, CHUNK) + do j = JLB, JUB + do i = ILB, IUB + if (Me%ExtVar%BasinPoints(i, j) == BasinPoint ) then + if(Me%myWaterColumn(i, j) .gt. Me%MinimumWaterColumn)then + Me%OpenPoints(i,j) = 1 + else + Me%OpenPoints(i,j) = 0 + endif + endif + enddo + enddo + !$OMP END DO NOWAIT + + !$OMP END PARALLEL end subroutine ModifyGeometryAndMapping @@ -5784,6 +5783,76 @@ end subroutine KinematicWave !-------------------------------------------------------------------------- + subroutine ComputeFaceVelocityModulus + + !Arguments------------------------------------------------------------- + + !Local----------------------------------------------------------------- + integer :: ILB, IUB, JLB, JUB + integer :: i, j + real :: U, V, Uaverage, Vaverage + integer :: CHUNK + + !Bounds + ILB = Me%WorkSize%ILB + IUB = Me%WorkSize%IUB + + JLB = Me%WorkSize%JLB + JUB = Me%WorkSize%JUB + + CHUNK = ChunkJ !CHUNK_J(Me%WorkSize%JLB, Me%WorkSize%JUB) + + !$OMP PARALLEL PRIVATE(I,J, U, Vaverage) + !$OMP DO SCHEDULE(DYNAMIC, CHUNKJ) + do j = JLB, JUB + do i = ILB, IUB + + if (Me%ComputeFaceU(i, j) == Compute) then + + Vaverage = (Me%FlowYOld(i, j )/Me%AreaV(i, j ) + & + Me%FlowYOld(i+1,j )/Me%AreaV(i+1,j ) + & + Me%FlowYOld(i+1,j-1)/Me%AreaV(i+1,j-1) + & + Me%FlowYOld(i, j-1)/Me%AreaV(i, j-1)) /4.0 + + U = Me%FlowXOld(i,j)/Me%AreaU(i,j) + + !Me%VelModFaceU(i, j) = sqrt(U**2.0 + Vaverage**2.0) + Me%VelModFaceU(i, j) = abs(cmplx(U, Vaverage)) + + endif + + enddo + enddo + !$OMP END DO NOWAIT + !$OMP END PARALLEL + + !$OMP PARALLEL PRIVATE(I,J, V, Vaverage) + !$OMP DO SCHEDULE(DYNAMIC, CHUNKJ) + do j = JLB, JUB + do i = ILB, IUB + + if (Me%ComputeFaceV(i, j) == Compute) then + + Uaverage = (Me%FlowXOld(i ,j)/Me%AreaU(i ,j ) + & + Me%FlowXOld(i-1,j )/Me%AreaU(i-1,j ) + & + Me%FlowXOld(i-1,j+1)/Me%AreaU(i-1,j+1) + & + Me%FlowXOld(i ,j+1)/Me%AreaU(i ,j+1)) /4.0 + + V = Me%FlowYOld(i,j)/Me%AreaV(i,j) + + !Me%VelModFaceV(i, j) = sqrt(V**2.0 + Uaverage**2.0) + Me%VelModFaceU(i, j) = abs(cmplx(Uaverage, V)) + + endif + + enddo + enddo + + !$OMP END DO NOWAIT + !$OMP END PARALLEL + + end subroutine ComputeFaceVelocityModulus + subroutine DynamicWaveXX (LocalDT) !Arguments------------------------------------------------------------- @@ -5890,15 +5959,24 @@ subroutine DynamicWaveXX (LocalDT) Pressure = LocalDT * Gravity * Me%AreaU(i, j) * Slope + !FRICTION - semi-implicit ----------------------------------------------- ! - = (s * m.s-2 * m3.s-1 * (s.m(-1/3))^2) / (m2 * m(4/3)) = m(10/3) / m(10/3) - Friction = LocalDT * Gravity * abs(Me%FlowXOld(i, j)) * Me%OverlandCoefficientX(i,j)** 2. & - / ( Me%AreaU(i, j) * HydraulicRadius ** (4./3.) ) - + !Friction = LocalDT * Gravity * abs(Me%FlowXOld(i, j)) * Me%OverlandCoefficientX(i,j)** 2. & + ! / ( Me%AreaU(i, j) * HydraulicRadius ** (4./3.) ) + + !Friction = LocalDT * Gravity * & + ! sqrt(Me%FlowXOld(i, j)**2. + Me%FlowYOld(i, j)**2.) * Me%OverlandCoefficientX(i,j)** 2. / & + ! ( Me%AreaU(i, j) * HydraulicRadius ** (4./3.) ) + + Friction = LocalDT * Gravity * & + Me%VelModFaceU(i,j) * Me%OverlandCoefficientX(i,j)** 2. / & + (HydraulicRadius ** (4./3.)) !Advection (may be limited to water column height) - if ((Me%CalculateAdvection) .and. (Me%myWaterColumn(i,j) .gt. Me%MinimumWaterColumnAdvection) & - .and. (Me%myWaterColumn(i,j-1) .gt. Me%MinimumWaterColumnAdvection)) then + if ((Me%ComputeAdvectionU(i,j) == 1) .and. (Me%myWaterColumn(i,j) .gt. Me%MinimumWaterColumnAdvection) .and. & + (Me%myWaterColumn(i,j-1) .gt. Me%MinimumWaterColumnAdvection)) then + !Face XU(i,j+1). Z U Faces have to be open if ((Me%ComputeFaceU(i, j) + Me%ComputeFaceU(i, j+1) == 2)) then @@ -5954,21 +6032,31 @@ subroutine DynamicWaveXX (LocalDT) XLeftAdv = 0.0 endif - !Faces of U(i,j) that were not being accounted (in 2D need to be accounted) - !Face YU(i+1,j) -! if (Me%ComputeFaceV(i+1, j-1) + Me%ComputeFaceV(i+1, j) & -! + Me%ComputeFaceU(i, j) + Me%ComputeFaceU(i+1, j) == 4) then - if (Me%ComputeFaceV(i+1, j-1) + Me%ComputeFaceV(i+1, j) .ge. 1) then + if (Me%ComputeFaceV(i+1, j-1) + Me%ComputeFaceV(i+1, j) .gt. 0) then - !if flows in same direction, advection is computed + !if flows in same direction, advection is computed if ((Me%FlowYOld(i+1, j-1) * Me%FlowYOld(i+1, j)).ge. 0.0) then Qf = (Me%FlowYOld(i+1, j-1) + Me%FlowYOld(i+1, j)) / 2.0 - if ((Qf > 0.0)) then + if (Qf > 0.0) then YTopAdv = Qf * Me%FlowXOld(i, j) / Me%AreaU(i, j) - elseif ((Qf < 0.0) .and. (Me%ComputeFaceU(i+1,j) == Compute)) then - YTopAdv = Qf * Me%FlowXOld(i+1, j) / Me%AreaU(i+1, j) + elseif (Qf < 0.0) then + if(Me%ComputeFaceU(i+1,j) == Compute) then + YTopAdv = Qf * Me%FlowXOld(i+1, j) / Me%AreaU(i+1, j) + !YTopAdv = (Me%FlowYOld(i+1, j-1) * (Me%FlowXOld(i+1, j-1) / Me%AreaU(i+1, j-1) + & + ! Me%FlowXOld(i+1, j) / Me%AreaU(i+1, j)) / 2.0 + & + ! Me%FlowYOld(i+1, j) * (Me%FlowXOld(i+1, j) / Me%AreaU(i+1, j) + & + ! Me%FlowXOld(i+1, j+1) / Me%AreaU(i+1, j+1)) / 2.0) / 2.0 + else + if(Me%ComputeFaceU(i+1, j-1)== Compute)then + YTopAdv = Qf * Me%FlowXOld(i+1, j-1) / Me%AreaU(i+1, j-1) + elseif(Me%ComputeFaceU(i+1, j+1) == Compute)then + YTopAdv = Qf * Me%FlowXOld(i+1, j+1) / Me%AreaU(i+1, j+1) + else + YTopAdv = 0.0 + endif + endif else YTopAdv = 0.0 endif @@ -5980,19 +6068,40 @@ subroutine DynamicWaveXX (LocalDT) YTopAdv = 0.0 endif - !Faces of U(i,j) that were not being accounted (in 2D need to be accounted) - !Face YU(i,j) -! if (Me%ComputeFaceV(i, j-1) + Me%ComputeFaceV(i, j) & -! + Me%ComputeFaceU(i, j) + Me%ComputeFaceU(i-1, j) == 4) then - if (Me%ComputeFaceV(i, j-1) + Me%ComputeFaceV(i, j) .ge. 1) then - !if flows in same direction, advection is computed + if (Me%ComputeFaceV(i, j-1) + Me%ComputeFaceV(i, j) .gt. 0) then + + !if flows in same direction, advection is computed if ((Me%FlowYOld(i, j-1) * Me%FlowYOld(i, j)).ge. 0.0) then Qf = (Me%FlowYOld(i, j-1) + Me%FlowYOld(i, j)) / 2.0 - - if ((Qf > 0.0) .and. (Me%ComputeFaceU(i-1,j) == Compute)) then - YBottomAdv = Qf * Me%FlowXOld(i-1, j) / Me%AreaU(i-1, j) + + if (Qf > 0.0)then + if(Me%ComputeFaceU(i-1,j) == Compute) then + YBottomAdv = Qf * Me%FlowXOld(i-1, j) / Me%AreaU(i-1, j) + + !YBottomAdv = (Me%FlowYOld(i, j-1) * (Me%FlowXOld(i-1, j-1) / Me%AreaU(i-1, j-1) + & + ! Me%FlowXOld(i-1, j) / Me%AreaU(i-1, j)) / 2.0 + & + ! Me%FlowYOld(i, j) * (Me%FlowXOld(i-1, j) / Me%AreaU(i-1, j) + & + ! Me%FlowXOld(i-1, j+1) / Me%AreaU(i-1, j+1)) / 2.0) / 2.0 + ! + !YBottomAdv = (Me%FlowYOld(i, j-1) * (Me%FlowXOld(i-1, j-1) / Me%AreaU(i-1, j-1) + & + ! Me%FlowXOld(i-1, j) / Me%AreaU(i-1, j)) / 2.0 + & + ! Me%FlowYOld(i, j) * (Me%FlowXOld(i-1, j) / Me%AreaU(i-1, j) + & + ! Me%FlowXOld(i-1, j+1) / Me%AreaU(i-1, j+1)) / 2.0) / 2.0 + + + + else + if(Me%ComputeFaceU(i-1, j-1) == Compute)then + YBottomAdv = Qf * Me%FlowXOld(i-1, j-1) / Me%AreaU(i-1, j-1) + elseif(Me%ComputeFaceU(i-1, j+1) == Compute)then + YBottomAdv = Qf * Me%FlowXOld(i-1, j+1) / Me%AreaU(i-1, j+1) + else + YBottomAdv = 0.0 + endif + + endif elseif ((Qf < 0.0)) then YBottomAdv = Qf * Me%FlowXOld(i, j) / Me%AreaU(i, j) else @@ -6005,17 +6114,17 @@ subroutine DynamicWaveXX (LocalDT) else YBottomAdv = 0.0 endif - - !Advection = (upAdv - downAdv) * LocalDT / Me%ExtVar%DUX(i, j) - Advection = (XLeftAdv - XRightAdv) * LocalDT / Me%ExtVar%DZX(i, j-1) & - + (YBottomAdv - YTopAdv) * LocalDT / Me%ExtVar%DYY(i, j) + + + Advection = (XLeftAdv - XRightAdv) * LocalDT / Me%ExtVar%DZX(i, j-1) + & + (YBottomAdv - YTopAdv) * LocalDT / Me%ExtVar%DYY(i, j) else Advection = 0.0 endif - + Me%lFlowX(i, j) = (Me%FlowXOld(i, j) + Pressure + Advection) / (1.0 + Friction) if (Me%LimitToCriticalFlow) then @@ -6201,15 +6310,22 @@ subroutine DynamicWaveYY (LocalDT) !m3/s = s * m/s2 * m2 * m/m Pressure = LocalDT * Gravity * Me%AreaV(i, j) * Slope - !FRICTION - semi-implicit ----------------------------------------------- ! - = (s * m.s-2 * m3.s-1 * (s.m(-1/3))^2) / (m2 * m(4/3)) = m(10/3) / m(10/3) - Friction = LocalDT * Gravity * abs(Me%FlowYOld(i, j)) * Me%OverlandCoefficientY(i,j) ** 2. & - / ( Me%AreaV(i, j) * HydraulicRadius ** (4./3.) ) + !Friction = LocalDT * Gravity * abs(Me%FlowYOld(i, j)) * Me%OverlandCoefficientY(i,j) ** 2. & + ! / ( Me%AreaV(i, j) * HydraulicRadius ** (4./3.) ) + + !Friction = LocalDT * Gravity * & + ! sqrt(Me%FlowXOld(i, j)**2. + Me%FlowYOld(i, j)**2.) * Me%OverlandCoefficientY(i,j)** 2. / & + ! ( Me%AreaV(i, j) * HydraulicRadius ** (4./3.) ) + + Friction = LocalDT * Gravity * & + Me%VelModFaceV(i,j) * Me%OverlandCoefficientY(i,j)** 2. / & + (HydraulicRadius ** (4./3.)) !Advection - if ((Me%CalculateAdvection) .and. (Me%myWaterColumn(i,j) .gt. Me%MinimumWaterColumnAdvection) & + if ((Me%ComputeAdvectionV(i,j) == 1) .and. (Me%myWaterColumn(i,j) .gt. Me%MinimumWaterColumnAdvection) & .and. (Me%myWaterColumn(i-1,j) .gt. Me%MinimumWaterColumnAdvection)) then !Face YV(i+1,j) @@ -6252,21 +6368,35 @@ subroutine DynamicWaveYY (LocalDT) YBottomAdv = 0.0 endif - !Faces of V(i,j) that were not being accounted (in 2D need to be accounted) - !Face XV(i,j+1) -! if (Me%ComputeFaceU(i, j+1) + Me%ComputeFaceU(i-1, j+1) & -! + Me%ComputeFaceV(i, j) + Me%ComputeFaceV(i, j+1) == 4) then - if (Me%ComputeFaceU(i, j+1) + Me%ComputeFaceU(i-1, j+1) .ge. 1) then + if (Me%ComputeFaceU(i, j+1) + Me%ComputeFaceU(i-1, j+1) .gt. 0) then - !if flows in same direction, advection is computed + !if flows in same direction, advection is computed if ((Me%FlowXOld(i, j+1) * Me%FlowXOld(i-1, j+1)).ge. 0.0) then Qf = (Me%FlowXOld(i, j+1) + Me%FlowXOld(i-1, j+1)) / 2.0 - - if ((Qf > 0.0)) then + + if (Qf > 0.0) then + XRightAdv = Qf * Me%FlowYOld(i, j) / Me%AreaV(i, j) - elseif ((Qf < 0.0) .and. (Me%ComputeFaceV(i,j+1) == Compute)) then - XRightAdv = Qf * Me%FlowYOld(i, j+1) / Me%AreaV(i, j+1) + + elseif (Qf < 0.0)then + + if(Me%ComputeFaceV(i,j+1) == Compute) then + XRightAdv = Qf * Me%FlowYOld(i, j+1) / Me%AreaV(i, j+1) + !XRightAdv = (Me%FlowXOld(i, j) * (Me%FlowYOld(i+1, j-1) / Me%AreaV(i+1, j-1) + & + ! Me%FlowYOld(i, j-1) / Me%AreaV(i, j-1)) / 2.0 + & + ! Me%FlowXOld(i-1, j) * (Me%FlowYOld(i, j-1) / Me%AreaV(i, j-1) + & + ! Me%FlowYOld(i-1, j-1) / Me%AreaV(i-1, j-1)) / 2.0)/2.0 + else + if(Me%ComputeFaceV(i-1, j+1) == Compute)then + XRightAdv = Qf * Me%FlowYOld(i-1, j+1) / Me%AreaV(i-1, j+1) + elseif(Me%ComputeFaceV(i+1, j+1) == Compute)then + XRightAdv = Qf * Me%FlowYOld(i+1, j+1) / Me%AreaV(i+1, j+1) + else + XRightAdv = 0.0 + endif + endif + else XRightAdv = 0.0 endif @@ -6278,20 +6408,34 @@ subroutine DynamicWaveYY (LocalDT) XRightAdv = 0.0 endif - !Faces of V(i,j) that were not being accounted (in 2D need to be accounted) - !Face XV(i,j) -! if (Me%ComputeFaceU(i, j) + Me%ComputeFaceU(i-1, j) & -! + Me%ComputeFaceV(i, j) + Me%ComputeFaceV(i, j-1) == 4) then - if (Me%ComputeFaceU(i, j) + Me%ComputeFaceU(i-1, j) .ge. 1) then + if (Me%ComputeFaceU(i, j) + Me%ComputeFaceU(i-1, j) .gt. 0) then - !if flows in same direction, advection is computed + !if flows in same direction, advection is computed if ((Me%FlowXOld(i, j) * Me%FlowXOld(i-1, j)).ge. 0.0) then Qf = (Me%FlowXOld(i, j) + Me%FlowXOld(i-1, j)) / 2.0 - - if ((Qf > 0.0) .and. (Me%ComputeFaceV(i,j-1) == Compute)) then - XLeftAdv = Qf * Me%FlowYOld(i, j-1) / Me%AreaV(i, j-1) - elseif ((Qf < 0.0)) then + + if (Qf > 0.0)then + if(Me%ComputeFaceV(i,j-1) == Compute) then + XLeftAdv = Qf * Me%FlowYOld(i, j-1) / Me%AreaV(i, j-1) + + !XLeftAdv = (Me%FlowXOld(i, j) * (Me%FlowYOld(i+1, j-1) / Me%AreaV(i+1, j-1) + & + ! Me%FlowYOld(i, j-1) / Me%AreaV(i, j-1)) / 2.0 + & + ! Me%FlowXOld(i-1, j) * (Me%FlowYOld(i, j-1) / Me%AreaV(i, j-1) + & + ! Me%FlowYOld(i-1, j-1) / Me%AreaV(i-1, j-1)) / 2.0)/2.0 + + else + + if(Me%ComputeFaceV(i+1, j-1) == Compute)then + XLeftAdv = Qf * Me%FlowYOld(i+1, j-1) / Me%AreaV(i+1, j-1) + elseif(Me%ComputeFaceV(i-1, j-1) == Compute)then + XLeftAdv = Qf * Me%FlowYOld(i-1, j-1) / Me%AreaV(i-1, j-1) + else + XLeftAdv = 0.0 + endif + + endif + elseif (Qf < 0.0) then XLeftAdv = Qf * Me%FlowYOld(i, j) / Me%AreaV(i, j) else XLeftAdv = 0.0 @@ -7236,15 +7380,16 @@ subroutine AddFlowFromStormWaterModel !The algorithm below has the following assumptions !1. MOHID Land calculates the POTENTIAL inflow into the sewer system through the street gutters. values per target gutter !points (matrix StreetGutterPotentialFlow) - !2. The values of the StreetGutterPotentialFlow are integrated at the nearest "NumberOfSewerStormWaterNodes" grid cells. values per gutter points - !(matrix StormWaterPotentialFlow) + !2. The values of the StreetGutterPotentialFlow are integrated at the nearest "NumberOfSewerStormWaterNodes" grid cells. + !values per gutter points (matrix StormWaterPotentialFlow) !3. This matrix (StormWaterPotentialFlow) is provided to SWMM !4. Swmm calculates the EFFECTIVE inflow and returns the efective flow (inflow or outflow) at each interaction point !(matrix StormWaterEffectiveFlow) !5. The algorithm below calculates the efective flow in each cell !5a - if the flow in the gutter target point is negative (inflow into the sewer system) the flow at each gutter will be !affected - ! by the ratio of StormWaterEffectiveFlow/StormWaterPotentialFlow (will be reduced in the same ratio as EFFECTIVE/POTENTIAL inflow) + ! by the ratio of StormWaterEffectiveFlow/StormWaterPotentialFlow (will be reduced in the same ratio as + ! EFFECTIVE/POTENTIAL inflow) !5b - if the flow in the cell is positive (outflow from the sewer system), the flow flows out ("saltam as tampas"). !6. The Water Column is reduced/increased due to the final flow !Remark: as StormWaterEffectiveFlow is inflow or outflow at each cell the two processes below can be separated and @@ -7843,44 +7988,43 @@ subroutine OverLandChannelInteraction end subroutine OverLandChannelInteraction !-------------------------------------------------------------------------- - !Method to instantaneously transport water in river runoff interaction (stability problems) - !this method should be deleted + !Method to calculate flow from river to channel for large rivers. Exchange only occur at the edges of the banks + ! + subroutine OverLandChannelInteraction_5 - subroutine OverLandChannelInteraction_1 - !Arguments------------------------------------------------------------- !Local----------------------------------------------------------------- integer :: i, j integer :: ILB, IUB, JLB, JUB, STAT_CALL - real :: dVol - real :: TotalVolume, VolExcess - real :: NewH + integer :: lowestI, lowestJ, di, dj + real :: Flow, lowestValue real , dimension(:, :), pointer :: ChannelsVolume real , dimension(:, :), pointer :: ChannelsMaxVolume real , dimension(:, :), pointer :: ChannelsWaterLevel real , dimension(:, :), pointer :: ChannelsNodeLength - real , dimension(:, :), pointer :: ChannelsSurfaceWidth + real :: dh, cellwidth, width, area integer, dimension(:, :), pointer :: ChannelsActiveState - + real , dimension(:, :), pointer :: ChannelsSurfaceWidth + call GetChannelsVolume (Me%ObjDrainageNetwork, ChannelsVolume, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'OverLandChannelInteraction_1 - ModuleRunOff - ERR04' + if (STAT_CALL /= SUCCESS_) stop 'FlowIntoChannels - ModuleRunOff - ERR04' call GetChannelsMaxVolume (Me%ObjDrainageNetwork, ChannelsMaxVolume, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'OverLandChannelInteraction_1 - ModuleRunOff - ERR05' + if (STAT_CALL /= SUCCESS_) stop 'FlowIntoChannels - ModuleRunOff - ERR05' call GetChannelsWaterLevel (Me%ObjDrainageNetwork, ChannelsWaterLevel, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'OverLandChannelInteraction_1 - ModuleRunOff - ERR01' + if (STAT_CALL /= SUCCESS_) stop 'FlowFromChannels - ModuleRunOff - ERR01' call GetChannelsNodeLength (Me%ObjDrainageNetwork, ChannelsNodeLength, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'OverLandChannelInteraction_1 - ModuleRunOff - ERR02' - - call GetChannelsSurfaceWidth (Me%ObjDrainageNetwork, ChannelsSurfaceWidth, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'OverLandChannelInteraction_1 - ModuleRunOff - ERR03' + if (STAT_CALL /= SUCCESS_) stop 'FlowFromChannels - ModuleRunOff - ERR02' call GetChannelsActiveState (Me%ObjDrainageNetwork, ChannelsActiveState, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'OverLandChannelInteraction_1 - ModuleRunOff - ERR06' + if (STAT_CALL /= SUCCESS_) stop 'FlowFromChannels - ModuleRunOff - ERR06' + + call GetChannelsSurfaceWidth (Me%ObjDrainageNetwork, ChannelsSurfaceWidth, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'FlowFromChannels - ModuleRunOff - ERR03' ILB = Me%WorkSize%ILB @@ -7894,42 +8038,121 @@ subroutine OverLandChannelInteraction_1 ChannelsActiveState (i, j) == BasinPoint .and. & !Active ChannelsMaxVolume (i, j) > 0.0) then !Not the outlet - !Total volume in the cell + channel - TotalVolume = Me%myWaterVolume(i, j) + ChannelsVolume (i, j) - - !All water fits into channel? - if (TotalVolume < ChannelsMaxVolume(i, j)) then + cellwidth = (Me%ExtVar%DUX(i, j) + Me%ExtVar%DVY(i, j) ) / 2.0 + width = (ChannelsNodeLength(i,j) + cellwidth) / 2.0 + + !Flow from land to channel + if (Me%myWaterLevel(i, j) - ChannelsWaterLevel(i, j) > Me%MinimumWaterColumn) then + + !Only consider flow if level above minimum + if (Me%myWaterColumn (i, j) > Me%MinimumWaterColumn) then + + + !2 cases: + ! 1. Level inside channel below topography -> Weir equation + ! 2. Level inside channel above topography -> Kinematic Wave + if (ChannelsWaterLevel(i, j) < Me%ExtVar%Topography(i, j)) then + dh = Me%myWaterColumn (i, j) + !Weir equation with 0.4 as coeficient. + Flow = 0.4 * cellwidth * sqrt(2.0 * Gravity) * dh ** 1.5 + + !Maximum empty cell + Flow = min(Flow, (Me%myWaterColumn (i, j) - Me%MinimumWaterColumn) * Me%ExtVar%GridCellArea(i,j) / Me%ExtVar%DT) + + else + area = width * (ChannelsWaterLevel(i, j) - Me%ExtVar%Topography(i, j)) + (Me%myWaterLevel (i, j) - Me%ExtVar%Topography(i, j)) / 2.0 + Flow = area * width ** (2./3.) * sqrt((Me%myWaterLevel(i, j) - ChannelsWaterLevel(i, j))/cellwidth) / Me%OverlandCoefficient(i, j) - Me%iFlowToChannels(i, j) = Me%iFlowToChannels(i, j) + Me%myWaterVolume (i, j) / Me%ExtVar%DT - - Me%myWaterVolume (i, j) = 0.0 - Me%myWaterColumn (i, j) = 0.0 - Me%myWaterLevel (i, j) = Me%ExtVar%Topography (i, j) + !Maximum equal levels + Flow = min(Flow, (Me%myWaterLevel (i, j) - ChannelsWaterLevel(i, j)) / 2.0 * Me%ExtVar%GridCellArea(i,j) / Me%ExtVar%DT) - else + endif - !Total Volume does not fit into the channel - !Route flow in a way the the water level becomes horizontal - !Limit flow so that volumes to not become negative and critical flow is not exceeded - - !Volume which does not fit into the channel - VolExcess = TotalVolume - ChannelsMaxVolume(i, j) + else - !New Height of water in cell - NewH = VolExcess / Me%ExtVar%GridCellArea(i, j) + Flow = 0.0 - !Flow to or from river is calculated based on the level difference (new to old) - !If the new level is higher than the old one, the flow will be positive (flow to channel) - !m3 = (m + m - m) * (m * m) - dVol = (NewH + Me%ExtVar%Topography(i, j) & - - ChannelsWaterLevel(i, j)) * (ChannelsNodeLength(i, j) * ChannelsSurfaceWidth(i, j)) - Me%iFlowToChannels(i, j) = Me%iFlowToChannels(i, j) + dVol / Me%ExtVar%DT - - !Updates Volumes - Me%myWaterVolume (i, j) = Me%myWaterVolume (i, j) - dVol + endif + + !!Important!! flow to channel may have other sources than this, so a sum is needed + Me%iFlowToChannels(i, j) = Me%iFlowToChannels(i, j) + Flow + + !Updates Variables + Me%myWaterVolume (i, j) = Me%myWaterVolume (i, j) - (Flow * Me%ExtVar%DT) Me%myWaterColumn (i, j) = Me%myWaterVolume (i, j) / Me%ExtVar%GridCellArea(i, j) Me%myWaterLevel (i, j) = Me%myWaterColumn (i, j) + Me%ExtVar%Topography (i, j) + + !Flow From River to Land + else if (ChannelsWaterLevel(i, j) - Me%myWaterLevel(i, j) > Me%MinimumWaterColumn) then + + !Only if level in channel is above topography + minimum + if (ChannelsWaterLevel(i, j) > Me%ExtVar%Topography (i, j) + Me%MinimumWaterColumn) then + + !2 cases: + ! 1. The target is differnt then the current cell and the water level in the bank cell is low -> Weir equation + ! 2. Otherwise kinematic wave + if (Me%myWaterColumn(i, j) < 10.0 * Me%MinimumWaterColumn) then + + !Discharge to the lowest surounding cell, so we do not create a false gradient to the adjecent river cell, which would slow down + !dicharge from the river to the surrounding area in case of bank overtopping + lowestValue = -1.0 * null_real + lowestI = null_int + lowestJ = null_int + do di = -1, 1 + do dj = -1, 1 + if (Me%ExtVar%BasinPoints(i+di, j+dj) == BasinPoint .and. Me%myWaterLevel(i+di, j+dj) < lowestValue) then + lowestValue = Me%myWaterLevel(i+di, j+dj) + lowestI = i+di + lowestJ = j+dj + endif + enddo + enddo + + dh = ChannelsWaterLevel(i, j) - Me%ExtVar%Topography (i, j) + !Weir equation with 0.4 as coeficient. + Flow = 0.4 * width * sqrt(2.0 * Gravity) * dh ** 1.5 + + !!Important!! flow to channel may have other sources than this, so a sum is needed + Me%iFlowToChannels(i, j) = Me%iFlowToChannels(i, j) - Flow + + !Updates Variables + Me%myWaterVolume (lowestI, lowestJ) = Me%myWaterVolume (lowestI, lowestJ) + (Flow * Me%ExtVar%DT) + Me%myWaterColumn (lowestI, lowestJ) = Me%myWaterVolume (lowestI, lowestJ) / Me%ExtVar%GridCellArea(lowestI, lowestJ) + Me%myWaterLevel (lowestI, lowestJ) = Me%myWaterColumn (lowestI, lowestJ) + Me%ExtVar%Topography (lowestI, lowestJ) + + else + + area = cellwidth * (ChannelsWaterLevel(i, j) - Me%ExtVar%Topography(i, j)) + (Me%myWaterLevel (i, j) - Me%ExtVar%Topography(i, j)) / 2.0 + Flow = area * cellwidth ** (2./3.) * sqrt((ChannelsWaterLevel(i, j)-Me%myWaterLevel(i, j))/cellwidth) / Me%OverlandCoefficient(i, j) + + !Maximum equal levels + Flow = min(Flow, (ChannelsWaterLevel(i, j) - Me%myWaterLevel(i, j)) / 2.0 * Me%ExtVar%GridCellArea(i,j) / Me%ExtVar%DT) + + + !!Important!! flow to channel may have other sources than this, so a sum is needed + Me%iFlowToChannels(i, j) = Me%iFlowToChannels(i, j) - Flow + + !Updates Variables + Me%myWaterVolume (i, j) = Me%myWaterVolume (i, j) + (Flow * Me%ExtVar%DT) + Me%myWaterColumn (i, j) = Me%myWaterVolume (i, j) / Me%ExtVar%GridCellArea(i, j) + Me%myWaterLevel (i, j) = Me%myWaterColumn (i, j) + Me%ExtVar%Topography (i, j) + + + endif + + else + + Flow = 0.0 + + endif + + else + + Flow = 0.0 + endif + + endif @@ -7937,26 +8160,24 @@ subroutine OverLandChannelInteraction_1 enddo call UnGetDrainageNetwork (Me%ObjDrainageNetwork, ChannelsVolume, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'OverLandChannelInteraction_1 - ModuleRunOff - ERR06' + if (STAT_CALL /= SUCCESS_) stop 'FlowFromChannels - ModuleRunOff - ERR06' call UnGetDrainageNetwork (Me%ObjDrainageNetwork, ChannelsMaxVolume, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'OverLandChannelInteraction_1 - ModuleRunOff - ERR06' + if (STAT_CALL /= SUCCESS_) stop 'FlowFromChannels - ModuleRunOff - ERR06' - call UnGetDrainageNetwork (Me%ObjDrainageNetwork, ChannelsWaterLevel, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'OverLandChannelInteraction_1 - ModuleRunOff - ERR06' + if (STAT_CALL /= SUCCESS_) stop 'FlowFromChannels - ModuleRunOff - ERR06' call UnGetDrainageNetwork (Me%ObjDrainageNetwork, ChannelsNodeLength, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'OverLandChannelInteraction_1 - ModuleRunOff - ERR07' - - call UnGetDrainageNetwork (Me%ObjDrainageNetwork, ChannelsSurfaceWidth, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'OverLandChannelInteraction_1 - ModuleRunOff - ERR08' + if (STAT_CALL /= SUCCESS_) stop 'FlowFromChannels - ModuleRunOff - ERR07' call UnGetDrainageNetwork (Me%ObjDrainageNetwork, ChannelsActiveState, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'OverLandChannelInteraction_1 - ModuleRunOff - ERR010' + if (STAT_CALL /= SUCCESS_) stop 'FlowFromChannels - ModuleRunOff - ERR010' - - end subroutine OverLandChannelInteraction_1 + call UnGetDrainageNetwork (Me%ObjDrainageNetwork, ChannelsSurfaceWidth, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'FlowFromChannels - ModuleRunOff - ERR020' + + end subroutine OverLandChannelInteraction_5 !-------------------------------------------------------------------------- @@ -9252,7 +9473,7 @@ subroutine RunOffOutput integer :: ILB, IUB, JLB, JUB real, dimension(6) , target :: AuxTime real, dimension(:) , pointer :: TimePointer - integer :: dis + integer :: dis if (MonitorPerformance) call StartWatch ("ModuleRunOff", "RunOffOutput") @@ -9285,19 +9506,32 @@ subroutine RunOffOutput !Sets limits for next write operations call HDF5SetLimits (Me%ObjHDF5, ILB, IUB, JLB, JUB, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'RunOffOutput - ModuleRunOff - ERR30' - + + + + !Writes mask with grid cells above minimum water column height + call HDF5WriteData (Me%ObjHDF5, "/Grid/OpenPoints", & + "OpenPoints", "-", & + Array2D = Me%OpenPoints, & + OutputNumber = Me%OutPut%NextOutPut, & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'RunOffOutput - ModuleRunOff - ERR031' + !Writes Flow values !Writes the Water Column - should be on runoff - call HDF5WriteData (Me%ObjHDF5, "//Results/water column", & + call HDF5WriteData (Me%ObjHDF5, "/Results/water column", & "water column", "m", & Array2D = Me%MyWaterColumn, & OutputNumber = Me%OutPut%NextOutPut, & STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'RunOffOutput - ModuleRunOff - ERR040' + + + !Writes the Water Level - call HDF5WriteData (Me%ObjHDF5, "//Results/water level", & + call HDF5WriteData (Me%ObjHDF5, "/Results/water level", & "water level", "m", & Array2D = Me%MyWaterLevel, & OutputNumber = Me%OutPut%NextOutPut, & @@ -10426,6 +10660,7 @@ subroutine ReadLockExternalVar (StaticOnly) !Gets Horizontal Grid call GetHorizontalGrid(Me%ObjHorizontalGrid, & DUX = Me%ExtVar%DUX, DVY = Me%ExtVar%DVY, & + DUY = Me%ExtVar%DUY, DVX = Me%ExtVar%DVX, & DXX = Me%ExtVar%DXX, DYY = Me%ExtVar%DYY, & DZX = Me%ExtVar%DZX, DZY = Me%ExtVar%DZY, & XX2D_Z = Me%ExtVar%XX2D_Z, YY2D_Z = Me%ExtVar%YY2D_Z, & @@ -10476,9 +10711,16 @@ subroutine ReadUnLockExternalVar(StaticOnly) call UnGetHorizontalGrid(Me%ObjHorizontalGrid, Me%ExtVar%DUX, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleRunOff - ERR03' - call UnGetHorizontalGrid(Me%ObjHorizontalGrid, Me%ExtVar%DVY, STAT = STAT_CALL) + call UnGetHorizontalGrid(Me%ObjHorizontalGrid, Me%ExtVar%DUY, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleRunOff - ERR04' + + !Unget Horizontal Grid + call UnGetHorizontalGrid(Me%ObjHorizontalGrid, Me%ExtVar%DVX, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleRunOff - ERR03a' + call UnGetHorizontalGrid(Me%ObjHorizontalGrid, Me%ExtVar%DVY, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleRunOff - ERR04a' + call UnGetHorizontalGrid(Me%ObjHorizontalGrid, Me%ExtVar%DXX, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleRunOff - ERR05' @@ -10679,4 +10921,4 @@ end function SetStormWaterModelFlow #endif -end module ModuleRunOff \ No newline at end of file +end module ModuleRunOff diff --git a/Software/MOHIDLand/ModuleSnow.F90 b/Software/MOHIDLand/ModuleSnow.F90 index f04820e89..588616f98 100644 --- a/Software/MOHIDLand/ModuleSnow.F90 +++ b/Software/MOHIDLand/ModuleSnow.F90 @@ -521,11 +521,11 @@ subroutine ConstructProperties !Begin----------------------------------------------------------------- do1 : do - call ExtractBlockFromBuffer (Me%ObjEnterData, & - ClientNumber = ClientNumber, & - block_begin = "BeginProperty", & - block_end = "EndProperty", & - BlockFound = BlockFound, & + call ExtractBlockFromBuffer (Me%ObjEnterData, & + ClientNumber = ClientNumber, & + block_begin = "", & + block_end = "", & + BlockFound = BlockFound, & STAT = STAT_CALL) cd1 : if (STAT_CALL .EQ. SUCCESS_) then @@ -681,7 +681,7 @@ subroutine ConstructPropertyValues (NewProperty) call GetData (NewProperty%Old, & Me%ObjEnterData, iflag, & keyword = 'OLD', & - Default = (.not. Me%Continuous), & + Default = .false., & SearchType = FromBlock, & ClientModule = 'ModuleSnow', & STAT = STAT_CALL) @@ -1170,7 +1170,7 @@ subroutine GetSnowMelting (ObjSnowID, SnowMelted, STAT) call Read_Lock(mSnow_, Me%InstanceID) - SnowMelted => Me%SnowPack%Value + SnowMelted => Me%SnowMelted STAT_ = SUCCESS_ else @@ -1286,6 +1286,8 @@ subroutine ModifySnow(SnowID, STAT) call GetComputeTimeStep (Me%ObjTime, Me%ExtVar%DT, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ModifySnow - ModuleSnow - ERR020' + + call ReadLockExternalVar() !Checks to see if it's time to compute a new SnowMeltingFlux if(Me%ExtVar%Now .GE. Me%SnowPack%Evolution%NextCompute) then @@ -1347,7 +1349,9 @@ subroutine ModifySnow(SnowID, STAT) Me%OutPut%NextRestartOutput = Me%OutPut%NextRestartOutput + 1 endif endif - + + call ReadUnLockExternalVar + STAT_ = SUCCESS_ if (MonitorPerformance) call StopWatch ("ModuleSnow", "ModifySnow") @@ -1939,4 +1943,4 @@ end subroutine ReadUnLockExternalVar !-------------------------------------------------------------------------- -end module ModuleSnow \ No newline at end of file +end module ModuleSnow \ No newline at end of file diff --git a/Software/MOHIDWater/Main.F90 b/Software/MOHIDWater/Main.F90 index 72e4e25cb..c0bd4f177 100644 --- a/Software/MOHIDWater/Main.F90 +++ b/Software/MOHIDWater/Main.F90 @@ -206,6 +206,7 @@ program MohidWater integer :: ObjLagrangianGlobal = 0 integer, dimension(:,:), pointer :: LagInstance => null() character(len=StringLength), dimension(: ), pointer :: ModelNames => null() + character(len=PathLength), dimension(: ), pointer :: ModelPaths => null() real, dimension(:), allocatable :: ModelDTs @@ -289,8 +290,15 @@ subroutine ConstructMohidWater do while (associated(CurrentModel)) call SetFilesName (CurrentModel%ModelPath) - call ConstructModel(LagInstance, ModelNames, NumberOfModels, ObjLagrangianGlobal, & - CurrentModel%ModelID, InitialSystemTime, STAT = STAT_CALL) + + call ConstructModel(LagInstance = LagInstance, & + ModelNames = ModelNames, & + ModelPaths = ModelPaths, & + NumberOfModels = NumberOfModels, & + ObjLagrangianGlobal = ObjLagrangianGlobal, & + ModelID = CurrentModel%ModelID, & + InitialSystemTime = InitialSystemTime, & + STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ConstructMohidWater - MohidWater - ERR20' !Get the Instance IDs of the Objects which are necessary for Model/SubModel @@ -607,12 +615,20 @@ subroutine ConstructMohidWaterMPI !PCL write(*,*) "Construct model MPI ID =", CurrentModel%MPI_ID - - call ConstructModel(LagInstance, ModelNames, NumberOfModels, & - ObjLagrangianGlobal, CurrentModel%ModelID, & - InitialSystemTime, CurrentModel%MPI_ID, & - CurrentModel%MasterID, CurrentModel%LastSlaveID, & - CurrentModel%ModelPath, STAT = STAT_CALL) + + + call ConstructModel(LagInstance = LagInstance, & + ModelNames = ModelNames, & + ModelPaths = ModelPaths, & + NumberOfModels = NumberOfModels, & + ObjLagrangianGlobal = ObjLagrangianGlobal, & + ModelID = CurrentModel%ModelID, & + InitialSystemTime = InitialSystemTime, & + MPI_ID = CurrentModel%MPI_ID, & + MasterID = CurrentModel%MasterID, & + LastSlaveID = CurrentModel%LastSlaveID, & + ModelPath = CurrentModel%ModelPath, & + STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ConstructMohidWaterMPI - MohidWater - ERR80' @@ -1216,6 +1232,7 @@ subroutine ConstructModelList endif iT allocate(ModelNames(1:NumberOfModels)) + allocate(ModelPaths(1:NumberOfModels)) allocate(LagInstance(1:TotalLagInst_, 1:NumberOfModels)) LagInstance(:,:) = 0 @@ -1227,6 +1244,7 @@ subroutine ConstructModelList do while (associated(CurrentModel)) i = i + 1 ModelNames(i) = trim(CurrentModel%ModelName) + ModelPaths(i) = trim(CurrentModel%ModelPath) NextModel => CurrentModel%Next doNext: do while (associated(NextModel)) @@ -1548,7 +1566,13 @@ subroutine KillMohidWater CurrentModel => CurrentModel%Next enddo + + if (associated(LagInstance )) deallocate(LagInstance) + if (associated(ModelNames )) deallocate(ModelNames ) + if (associated(ModelPaths )) deallocate(ModelPaths ) + + if (MonitorPerformance) then call KillWatchGroup (STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'KillMohidWater - MohidWater - ERR02' diff --git a/Software/MOHIDWater/ModuleAssimilation.F90 b/Software/MOHIDWater/ModuleAssimilation.F90 index 6a2ce59bd..64b4dceab 100644 --- a/Software/MOHIDWater/ModuleAssimilation.F90 +++ b/Software/MOHIDWater/ModuleAssimilation.F90 @@ -182,6 +182,7 @@ Module ModuleAssimilation logical :: OutputHDF = .false. type (T_Time) :: LastTimeSerieOutput type (T_Property), pointer :: Next, Prev + character(len=StringLength) :: GroupOutPutName = null_str end type T_Property private :: T_Files @@ -395,7 +396,12 @@ subroutine StartAssimilation(AssimilationID, & if(STAT_CALL .ne. SUCCESS_)stop 'StartAssimilation - ModuleAssimilation - ERR04' ! By default a output file is always open in the construction phase - if (Me%OutPut%ON) call Open_HDF5_OutPut_File + if (Me%OutPut%ON) then + call Open_HDF5_OutPut_File + endif + + call CheckOutputGroupName + call null_time(Me%ActualTime) @@ -417,6 +423,48 @@ end subroutine StartAssimilation !-------------------------------------------------------------------------- + !-------------------------------------------------------------------------- + + subroutine CheckOutputGroupName + + !Local----------------------------------------------------------------- + type(T_Property), pointer :: PropertyX, PropertyY + character(len=StringLength) :: AuxChar + integer :: cX, cY, cF, NumOfFields + + !Begin----------------------------------------------------------------- + + cX = 0 + PropertyX => Me%FirstAssimilationProp + do while (associated(PropertyX)) + cX = cX + 1 + NumOfFields = CountNumOfFields(PropertyX%ID%IDNumber) + + if (NumOfFields > 1) then + cY = 0 + cF = 1 + PropertyY => Me%FirstAssimilationProp + do while (associated(PropertyY)) + cY = cY + 1 + if (trim(PropertyY%GroupOutPutName) == trim(PropertyX%ID%Name) .and. & + trim(PropertyY%GroupOutPutName) == trim(PropertyX%GroupOutPutName) .and. & + cY /= cX) then + cF = cF + 1 + write(AuxChar,fmt=*) cF + PropertyY%GroupOutPutName = trim(PropertyY%GroupOutPutName)//"_"//trim(adjustl(AuxChar)) + endif + PropertyY => PropertyY%Next + enddo + endif + + PropertyX => PropertyX%Next + + enddo + + end subroutine CheckOutputGroupName + + !-------------------------------------------------------------------------- + subroutine AllocateInstance !Local----------------------------------------------------------------- @@ -968,22 +1016,22 @@ subroutine ConstructAssimilationField(NewProperty, ClientNumber) call GetWaterPoints2D(Me%ObjHorizontalMap, WaterPoints2D, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ConstructAssimilationField - ModuleAssimilation - ERR10' - call GetWaterFaces2D(Me%ObjHorizontalMap, & - WaterFaces2DU = WaterFaces2D_U, & - WaterFaces2DV = WaterFaces2D_V, & + call GetWaterFaces2D(Me%ObjHorizontalMap, & + WaterFaces2DU = WaterFaces2D_U, & + WaterFaces2DV = WaterFaces2D_V, & STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadInitialImposedSolution - ModuleHydrodynamic - ERR20' + if (STAT_CALL /= SUCCESS_) stop 'ConstructAssimilationField - ModuleAssimilation - ERR20' - call GetWaterFaces3D(Me%ObjMap, & - WaterFacesU3D = WaterFaces3D_U, & - WaterFacesV3D = WaterFaces3D_V, & + call GetWaterFaces3D(Me%ObjMap, & + WaterFacesU3D = WaterFaces3D_U, & + WaterFacesV3D = WaterFaces3D_V, & STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadInitialImposedSolution - ModuleHydrodynamic - ERR30' + if (STAT_CALL /= SUCCESS_) stop 'ConstructAssimilationField - ModuleAssimilation - ERR30' call GetWaterPoints3D(Me%ObjMap,WaterPoints3D, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadInitialImposedSolution - ModuleHydrodynamic - ERR40' + if (STAT_CALL /= SUCCESS_) stop 'ConstructAssimilationField - ModuleAssimilation - ERR40' !Initial value of NewProperty%LastActualization = =-9999999 @@ -999,6 +1047,14 @@ subroutine ConstructAssimilationField(NewProperty, ClientNumber) STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ConstructAssimilationField - ModuleAssimilation - ERR50' + call GetData(NewProperty%GroupOutPutName, Me%ObjEnterData, iflag, & + keyword = 'GROUP_OUTPUT_NAME', & + default = trim(NewProperty%ID%Name), & + SearchType = FromBlock, & + ClientModule = 'ModuleAssimilation', & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ConstructAssimilationField - ModuleAssimilation - ERR55' + call ExtractBlockFromBlock(Me%ObjEnterData, ClientNumber, & begin_field, end_field, BlockFound, & @@ -1785,7 +1841,7 @@ end subroutine GetAssimilationSize subroutine GetAssimilationField(AssimilationID, ID, N_Field, & - Field2D, Field3D, STAT) + Field2D, Field3D, GroupOutPutName, STAT) !Arguments-------------------------------------------------------------- integer , intent(IN ) :: AssimilationID @@ -1793,6 +1849,7 @@ subroutine GetAssimilationField(AssimilationID, ID, N_Field, & integer , intent(IN ), optional :: N_Field real, dimension(:,: ), pointer, optional :: Field2D real, dimension(:,:,:), pointer, optional :: Field3D + character(len=StringLength), optional :: GroupOutPutName integer, optional, intent(OUT) :: STAT !External-------------------------------------------------------------- @@ -1827,8 +1884,11 @@ subroutine GetAssimilationField(AssimilationID, ID, N_Field, & STAT = STAT_CALL) cd2: if (STAT_CALL == SUCCESS_) then - - + + if (present(GroupOutPutName)) then + GroupOutPutName = PropertyX%GroupOutPutName + endif + STAT_CALL1 = SUCCESS_ cd3: if (PropertyX%Dim == Dim_2D) then @@ -1859,6 +1919,8 @@ subroutine GetAssimilationField(AssimilationID, ID, N_Field, & if (present(Field2D )) STAT_CALL1 = NOT_ASSOCIATE_ endif cd3 + + STAT_ = STAT_CALL1 @@ -1889,6 +1951,7 @@ end subroutine GetAssimilationField subroutine GetAssimilationVectorField(AssimilationID, & VectorX_ID, VectorY_ID, & + N_Field, & VectorX_2D, VectorY_2D, & VectorX_3D, VectorY_3D, & STAT) @@ -1896,6 +1959,7 @@ subroutine GetAssimilationVectorField(AssimilationID, !Arguments-------------------------------------------------------------- integer :: AssimilationID integer :: VectorX_ID, VectorY_ID + integer, optional :: N_Field real, dimension(:,: ), pointer, optional :: VectorX_2D, VectorY_2D real, dimension(:,:,:), pointer, optional :: VectorX_3D, VectorY_3D integer, optional, intent(OUT) :: STAT @@ -1903,7 +1967,8 @@ subroutine GetAssimilationVectorField(AssimilationID, !External-------------------------------------------------------------- integer :: ready_ type (T_Property), pointer :: PropertyX, PropertyY - integer :: STAT_CALL_X, STAT_CALL_Y + integer :: STAT_CALL_X, STAT_CALL_Y + integer :: N_Field_ !Local----------------------------------------------------------------- integer :: STAT_ @@ -1916,12 +1981,23 @@ subroutine GetAssimilationVectorField(AssimilationID, cd1 : if ((ready_ .EQ. IDLE_ERR_ ) .OR. & (ready_ .EQ. READ_LOCK_ERR_)) then + + if (present(N_Field)) then + N_Field_ = N_Field + else + N_Field_ = 1 + endif nullify(PropertyX) - call SearchProperty(PropertyX = PropertyX, PropertyXIDNumber = VectorX_ID, STAT = STAT_CALL_X) - + call SearchProperty(PropertyX = PropertyX, & + PropertyXIDNumber = VectorX_ID, & + N_Field = N_Field_, & + STAT = STAT_CALL_X) nullify(PropertyY) - call SearchProperty(PropertyX = PropertyY, PropertyXIDNumber = VectorY_ID, STAT = STAT_CALL_Y) + call SearchProperty(PropertyX = PropertyY, & + PropertyXIDNumber = VectorY_ID, & + N_Field = N_Field_, & + STAT = STAT_CALL_Y) cd2: if (STAT_CALL_X == SUCCESS_ .and. STAT_CALL_Y == SUCCESS_) then @@ -2441,7 +2517,6 @@ subroutine GetNumberOfFields(AssimilationID, ID, NumberOfFields, STAT) !External-------------------------------------------------------------- integer :: ready_ - type (T_Property), pointer :: PropertyX !Local----------------------------------------------------------------- integer :: STAT_ @@ -2455,19 +2530,10 @@ subroutine GetNumberOfFields(AssimilationID, ID, NumberOfFields, STAT) cd1 : if ((ready_ .EQ. IDLE_ERR_ ) .OR. & (ready_ .EQ. READ_LOCK_ERR_)) then - NumberOfFields = 0 - - PropertyX => Me%FirstAssimilationProp - do while (associated(PropertyX)) - - if (PropertyX%ID%IDNumber == ID) then - NumberOfFields = NumberOfFields + 1 - endif - - PropertyX => PropertyX%Next - - end do + NumberOfFields = CountNumOfFields(ID) + + STAT_ = SUCCESS_ else cd1 @@ -2484,8 +2550,38 @@ subroutine GetNumberOfFields(AssimilationID, ID, NumberOfFields, STAT) end subroutine GetNumberOfFields !-------------------------------------------------------------------------- - + + !-------------------------------------------------------------------------- + + integer function CountNumOfFields(ID) + + !Arguments-------------------------------------------------------------- + integer, intent(IN ) :: ID + + !Local----------------------------------------------------------------- + type (T_Property), pointer :: PropertyX + integer :: NumberOfFields + + !---------------------------------------------------------------------- + + NumberOfFields = 0 + + PropertyX => Me%FirstAssimilationProp + + do while (associated(PropertyX)) + + if (PropertyX%ID%IDNumber == ID) then + NumberOfFields = NumberOfFields + 1 + endif + + PropertyX => PropertyX%Next + + end do + + CountNumOfFields = NumberOfFields + + end function CountNumOfFields !-------------------------------------------------------------------------- @@ -3995,6 +4091,7 @@ subroutine OutPutResultsHDF integer :: WorkKLB, WorkKUB real, dimension(6), target :: AuxTime real, dimension(:), pointer :: TimePtr + character(len=StringLength) :: GroupOutPutName !---------------------------------------------------------------------- @@ -4071,39 +4168,44 @@ subroutine OutPutResultsHDF PropertyX => Me%FirstAssimilationProp do while (associated(PropertyX)) + if (PropertyX%OutputHDF) then - if (PropertyX%Dim == Dim_2D) then - call HDF5WriteData (Me%ObjHDF5, "/Results/"//PropertyX%ID%Name, PropertyX%ID%Name, & - PropertyX%ID%Units, Array2D = PropertyX%Field%R2D, & - OutputNumber = OutPutNumber, STAT = STAT_CALL) - if (STAT_CALL .NE. SUCCESS_) stop 'OutPutResultsHDF - ModuleAssimilation - ERR09' + GroupOutPutName = PropertyX%GroupOutPutName + + + if (PropertyX%Dim == Dim_2D) then + + call HDF5WriteData (Me%ObjHDF5, "/Results/"//GroupOutPutName, PropertyX%ID%Name, & + PropertyX%ID%Units, Array2D = PropertyX%Field%R2D, & + OutputNumber = OutPutNumber, STAT = STAT_CALL) + if (STAT_CALL .NE. SUCCESS_) stop 'OutPutResultsHDF - ModuleAssimilation - ERR09' - call HDF5WriteData (Me%ObjHDF5, "/DecayCoefs/"//PropertyX%ID%Name, PropertyX%ID%Name, & - PropertyX%ID%Units, Array2D = PropertyX%CoefField%R2D, & - OutputNumber = OutPutNumber, STAT = STAT_CALL) - if (STAT_CALL .NE. SUCCESS_) stop 'OutPutResultsHDF - ModuleAssimilation - ERR14' + call HDF5WriteData (Me%ObjHDF5, "/DecayCoefs/"//GroupOutPutName, PropertyX%ID%Name, & + PropertyX%ID%Units, Array2D = PropertyX%CoefField%R2D, & + OutputNumber = OutPutNumber, STAT = STAT_CALL) + if (STAT_CALL .NE. SUCCESS_) stop 'OutPutResultsHDF - ModuleAssimilation - ERR14' - elseif (PropertyX%Dim == Dim_3D) then + elseif (PropertyX%Dim == Dim_3D) then - call HDF5WriteData (Me%ObjHDF5, "/Results/"//PropertyX%ID%Name, PropertyX%ID%Name, & - PropertyX%ID%Units, Array3D = PropertyX%Field%R3D, & - OutputNumber = OutPutNumber, STAT = STAT_CALL) - if (STAT_CALL .NE. SUCCESS_) stop 'OutPutResultsHDF - ModuleAssimilation - ERR10' + call HDF5WriteData (Me%ObjHDF5, "/Results/"//GroupOutPutName, PropertyX%ID%Name, & + PropertyX%ID%Units, Array3D = PropertyX%Field%R3D, & + OutputNumber = OutPutNumber, STAT = STAT_CALL) + if (STAT_CALL .NE. SUCCESS_) stop 'OutPutResultsHDF - ModuleAssimilation - ERR10' - call HDF5WriteData (Me%ObjHDF5, "/DecayCoefs/"//PropertyX%ID%Name, PropertyX%ID%Name, & - PropertyX%ID%Units, Array3D = PropertyX%CoefField%R3D, & - OutputNumber = OutPutNumber, STAT = STAT_CALL) - if (STAT_CALL .NE. SUCCESS_) stop 'OutPutResultsHDF - ModuleAssimilation - ERR10' + call HDF5WriteData (Me%ObjHDF5, "/DecayCoefs/"//GroupOutPutName, PropertyX%ID%Name, & + PropertyX%ID%Units, Array3D = PropertyX%CoefField%R3D, & + OutputNumber = OutPutNumber, STAT = STAT_CALL) + if (STAT_CALL .NE. SUCCESS_) stop 'OutPutResultsHDF - ModuleAssimilation - ERR10' - else + else - stop 'OutPutResultsHDF - ModuleAssimilation - ERR11' + stop 'OutPutResultsHDF - ModuleAssimilation - ERR11' - endif + endif endif diff --git a/Software/MOHIDWater/ModuleHydrodynamic.F90 b/Software/MOHIDWater/ModuleHydrodynamic.F90 index 071e8acdb..585ecf352 100644 --- a/Software/MOHIDWater/ModuleHydrodynamic.F90 +++ b/Software/MOHIDWater/ModuleHydrodynamic.F90 @@ -149,7 +149,7 @@ Module ModuleHydrodynamic GetDDecompWorkSize2D, WriteHorizontalGrid_UV, & GetCellRotation, GetGridCellArea use ModuleTwoWay, only : ConstructTwoWayHydrodynamic, ModifyTwoWay, & - Allocate2WayAuxiliars_Hydrodynamic, PrepTwoWay, & + Alloc2WayAux_Hydro, PrepTwoWay, & UngetTwoWayExternal_Vars #ifdef _USE_MPI use ModuleHorizontalGrid, only : ReceiveSendProperitiesMPI, THOMAS_DDecompHorizGrid @@ -167,7 +167,8 @@ Module ModuleHydrodynamic GetComputeFaces3D, GetImposedTangentialFaces, & GetImposedNormalFaces, UnGetMap, & UpdateComputeFaces3D, SetComputesFaces3D, & - GetLandBoundaryFaces3D, GetWetFaces + GetLandBoundaryFaces3D, GetWetFaces, & + GetWaterFaces3D use ModuleBoxDif, only : StartBoxDif, GetBoxes, BoxDif, UngetBoxDif, & KillBoxDif use ModuleOpenBoundary, only : ConstructOpenBoundary, Modify_OpenBoundary, & @@ -188,7 +189,7 @@ Module ModuleHydrodynamic KillAssimilation, GetAssimilationAltimetry, & GetAssimilationAltimetryDT, GetAltimetryDecayTime,& GetAltimSigmaDensAnalyzed, GetAssimilationVectorField, & - GetWaveCelerityField + GetWaveCelerityField, GetNumberOfFields use ModuleStopWatch, only : StartWatch, StopWatch use ModuleStatistic, only : ConstructStatistic, GetStatisticMethod, & GetStatisticParameters, GetStatisticLayersNumber, & @@ -363,8 +364,6 @@ Module ModuleHydrodynamic private :: WaterLevel_OpenBoundary private :: WaterLevel_ImposedWave private :: WaterLevel_FlatherWindWave - private :: WaterLevel_FlatherWindWaveV2 - private :: WaterLevel_FlatherWindWaveV3 private :: WaterLevel_FlatherLocalSolution private :: WaterLevel_BlumbergKantha private :: WaterLevelDischarges @@ -2643,6 +2642,7 @@ subroutine ReadInitialImposedSolution !Local----------------------------------------------------------------- real, dimension(:,:,:), pointer :: Matrix3D integer, dimension(:,:,:), pointer :: PointsToFill3D + integer, dimension(:,:,:), pointer :: WaterFaces3D_U, WaterFaces3D_V character(len = StringLength) :: BeginBlock, EndBlock, Char_TypeZUV integer :: STAT_CALL, ClientNumber, i, j, k, iflag logical :: BlockFound @@ -2650,7 +2650,7 @@ subroutine ReadInitialImposedSolution real :: MinWaterColumn real, dimension(:,:), pointer :: Bathymetry - !---------------------------------------------------------------------- + !Begin----------------------------------------------------------------- BeginBlock = "" @@ -2779,7 +2779,7 @@ subroutine ReadInitialImposedSolution if (STAT_CALL /= SUCCESS_) stop 'ReadInitialImposedSolution - ModuleHydrodynamic - ERR120' - call GetOpenPoints3D(Me%ObjMap, Me%External_Var%OpenPoints3D, STAT = STAT_CALL) + call GetWaterPoints3D(Me%ObjMap, Me%External_Var%WaterPoints3D, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ReadInitialImposedSolution - ModuleHydrodynamic - ERR130' RotateX = .false. @@ -2809,13 +2809,19 @@ subroutine ReadInitialImposedSolution Me%Velocity%Horizontal%U%InTypeZUV = TranslateTypeZUV(Char_TypeZUV) if (Me%Velocity%Horizontal%U%InTypeZUV == TypeU_) then + + call GetWaterFaces3D(Me%ObjMap, & + WaterFacesU3D = WaterFaces3D_U, & + WaterFacesV3D = WaterFaces3D_V, & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadInitialImposedSolution - ModuleHydrodynamic - ERR155' - PointsToFill3D => Me%External_Var%ComputeFaces3D_U + PointsToFill3D => WaterFaces3D_U Matrix3D => Me%Velocity%Horizontal%U%New else if (Me%Velocity%Horizontal%U%InTypeZUV == TypeZ_) then - PointsToFill3D => Me%External_Var%OpenPoints3D + PointsToFill3D => Me%External_Var%WaterPoints3D allocate (Matrix3D(Me%Size%ILB:Me%Size%IUB,Me%Size%JLB:Me%Size%JUB,Me%Size%KLB:Me%Size%KUB)) Matrix3D(:,:,:) = FillValueReal @@ -2844,6 +2850,16 @@ subroutine ReadInitialImposedSolution ClientID = ClientNumber, & STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ReadInitialImposedSolution - ModuleHydrodynamic - ERR180' + + if (Me%Velocity%Horizontal%U%InTypeZUV == TypeU_) then + + call UnGetMap(Me%ObjMap, WaterFaces3D_U, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadInitialImposedSolution - ModuleHydrodynamic - ERR185' + + call UnGetMap(Me%ObjMap, WaterFaces3D_V, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadInitialImposedSolution - ModuleHydrodynamic - ERR186' + + endif if (Me%Velocity%Horizontal%U%ID%SolutionFromFile .and. & Me%ComputeOptions%Evolution /= ImposedSolution_) then @@ -2929,13 +2945,20 @@ subroutine ReadInitialImposedSolution Me%Velocity%Horizontal%V%InTypeZUV = TranslateTypeZUV(Char_TypeZUV) if (Me%Velocity%Horizontal%V%InTypeZUV == TypeV_) then + + call GetWaterFaces3D(Me%ObjMap, & + WaterFacesU3D = WaterFaces3D_U, & + WaterFacesV3D = WaterFaces3D_V, & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadInitialImposedSolution - ModuleHydrodynamic - ERR155' + + PointsToFill3D => WaterFaces3D_V - PointsToFill3D => Me%External_Var%ComputeFaces3D_V Matrix3D => Me%Velocity%Horizontal%V%New else if (Me%Velocity%Horizontal%V%InTypeZUV == TypeZ_) then - PointsToFill3D => Me%External_Var%OpenPoints3D + PointsToFill3D => Me%External_Var%WaterPoints3D allocate (Matrix3D(Me%Size%ILB:Me%Size%IUB,Me%Size%JLB:Me%Size%JUB,Me%Size%KLB:Me%Size%KUB)) Matrix3D(:,:,:) = FillValueReal @@ -2965,6 +2988,16 @@ subroutine ReadInitialImposedSolution ClientID = ClientNumber, & STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ReadInitialImposedSolution - ModuleHydrodynamic - ERR260' + + if (Me%Velocity%Horizontal%V%InTypeZUV == TypeV_) then + + call UnGetMap(Me%ObjMap, WaterFaces3D_U, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadInitialImposedSolution - ModuleHydrodynamic - ERR265' + + call UnGetMap(Me%ObjMap, WaterFaces3D_V, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadInitialImposedSolution - ModuleHydrodynamic - ERR266' + + endif if (Me%Velocity%Horizontal%V%ID%SolutionFromFile .and. & Me%ComputeOptions%Evolution /= ImposedSolution_) then @@ -3095,7 +3128,7 @@ subroutine ReadInitialImposedSolution if (STAT_CALL /= SUCCESS_) stop 'ReadInitialImposedSolution - ModuleHydrodynamic - ERR360' - call UnGetMap(Me%ObjMap, Me%External_Var%OpenPoints3D, STAT = STAT_CALL) + call UnGetMap(Me%ObjMap, Me%External_Var%WaterPoints3D, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ReadInitialImposedSolution - ModuleHydrodynamic - ERR370' call UnGetGeometry(Me%ObjGeometry, Me%External_Var%Area_U, STAT = STAT_CALL) @@ -7629,17 +7662,6 @@ Subroutine Construct_Numerical_Options if (STAT_CALL /= SUCCESS_) & call SetError(FATAL_, INTERNAL_, 'Construct_Numerical_Options - Hydrodynamic - ERR1130') - call GetData(Me%ComputeOptions%ExternalBarotropicVel2D, & - Me%ObjEnterData, iflag, & - Keyword = 'EXTERNAL_BAROTROPIC_2D', & - Default = .true., & - SearchType = FromFile, & - ClientModule ='ModuleHydrodynamic', & - STAT = STAT_CALL) - - if (STAT_CALL /= SUCCESS_) & - call SetError(FATAL_, INTERNAL_, 'Construct_Numerical_Options - Hydrodynamic - ERR1140') - ! !Keyword : SCRAPER @@ -15772,7 +15794,7 @@ subroutine SetHydroFather (HydrodynamicID, HydrodynamicFatherID, InitialField, S call GetComputeTimeStep (ObjHydrodynamicFather%ObjTime, DT_Father) if (Me%ComputeOptions%TwoWay)then - call Allocate2WayAuxiliars_Hydrodynamic(HydrodynamicFatherID, HydrodynamicID) + call Alloc2WayAux_Hydro(HydrodynamicFatherID, HydrodynamicID) endif @@ -22173,7 +22195,7 @@ Subroutine ReadImposedSolution else if (Me%Velocity%Horizontal%U%InTypeZUV == TypeZ_) then - PointsToFill3D => Me%External_Var%OpenPoints3D + PointsToFill3D => Me%External_Var%WaterPoints3D allocate (Matrix3D(Me%Size%ILB:Me%Size%IUB,Me%Size%JLB:Me%Size%JUB,Me%Size%KLB:Me%Size%KUB)) @@ -22234,7 +22256,7 @@ Subroutine ReadImposedSolution else if (Me%Velocity%Horizontal%V%InTypeZUV == TypeZ_) then - PointsToFill3D => Me%External_Var%OpenPoints3D + PointsToFill3D => Me%External_Var%WaterPoints3D allocate (Matrix3D(Me%Size%ILB:Me%Size%IUB,Me%Size%JLB:Me%Size%JUB,Me%Size%KLB:Me%Size%KUB)) Matrix3D(:,:,:) = FillValueReal @@ -26207,31 +26229,6 @@ Subroutine Compute_WaterLevel endif -! -! if (Me%ComputeOptions%BarotropicRadia == FlatherWindWave_) then -! -! -! !Compute radiation in the boundary faces with explicit flux -! call WaterLevel_FlatherWindWaveV3 ( & -! WaterFlux_XY = Me%WaterFluxes%YX, & -! WaterFlux_YX = Me%WaterFluxes%XY, & -! WaterColumnUV = Me%External_Var%WaterColumnVU, & -! DUX_VY = Me%External_Var%DVY_UX, & -! DVY_UX = Me%External_Var%DUX_VY, & -! DYY_XX = Me%External_Var%DXX_YY, & -! ComputeFaces3D_UV = Me%External_Var%ComputeFaces3D_VU, & -! ComputeFaces3D_VU = Me%External_Var%ComputeFaces3D_UV, & -! BoundaryFacesUV = Me%External_Var%BoundaryFacesVU, & -! Kfloor_UV = Me%External_Var%Kfloor_VU, & -! Kfloor_VU = Me%External_Var%Kfloor_UV, & -! di = Me%Direction%dj, & -! dj = Me%Direction%di, & -! DirectionXY = Me%Direction%YX, & -! ImplicitFaces = .false.) -! -! endif - - if (Me%Tsunami%ON) then if (Me%Tsunami%Fault%T0 <= Me%CurrentTime) then @@ -27495,7 +27492,7 @@ Subroutine WaterLevel_OpenBoundary else if (BarotropicRadia == FlatherWindWave_) then !Compute radiation in the boundary faces with implicit flux - call WaterLevel_FlatherWindWaveV3 ( & + call WaterLevel_FlatherWindWave ( & WaterFlux_XY = Me%WaterFluxes%XY, & WaterFlux_YX = Me%WaterFluxes%YX, & WaterColumnUV = Me%External_Var%WaterColumnUV, & @@ -27511,26 +27508,6 @@ Subroutine WaterLevel_OpenBoundary dj = Me%Direction%dj, & DirectionXY = Me%Direction%XY, & ImplicitFaces = .true.) -! -! !Compute radiation in the boundary faces with explicit flux -! call WaterLevel_FlatherWindWaveV3 ( & -! WaterFlux_XY = Me%WaterFluxes%YX, & -! WaterFlux_YX = Me%WaterFluxes%XY, & -! WaterColumnUV = Me%External_Var%WaterColumnVU, & -! DUX_VY = Me%External_Var%DVY_UX, & -! DVY_UX = Me%External_Var%DUX_VY, & -! DYY_XX = Me%External_Var%DXX_YY, & -! ComputeFaces3D_UV = Me%External_Var%ComputeFaces3D_VU, & -! ComputeFaces3D_VU = Me%External_Var%ComputeFaces3D_UV, & -! BoundaryFacesUV = Me%External_Var%BoundaryFacesVU, & -! Kfloor_UV = Me%External_Var%Kfloor_VU, & -! Kfloor_VU = Me%External_Var%Kfloor_UV, & -! di = Me%Direction%dj, & -! dj = Me%Direction%di, & -! DirectionXY = Me%Direction%YX, & -! ImplicitFaces = .false.) - -! call WaterLevel_FlatherWindWaveV2 () else if (BarotropicRadia == FlatherLocalSolution_) then @@ -28656,19 +28633,19 @@ End Subroutine CyclicBoundVertical ! ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - Subroutine WaterLevel_FlatherWindWave ( WaterFlux_XY, WaterFlux_YX, & + Subroutine WaterLevel_FlatherWindWave ( WaterFlux_XY, WaterFlux_YX, & WaterColumnUV, DUX_VY, DVY_UX, DYY_XX, & ComputeFaces3D_UV, ComputeFaces3D_VU, & BoundaryFacesUV, kfloor_UV, kfloor_VU, & - di, dj, ImplicitFaces) + di, dj, DirectionXY, ImplicitFaces) !Arguments------------------------------------------------------------ real(8), dimension (:,:,:), pointer :: WaterFlux_XY, WaterFlux_YX real, dimension (:,: ), pointer :: WaterColumnUV, DUX_VY, DVY_UX, DYY_XX integer, dimension (:,:,:), pointer :: ComputeFaces3D_UV, ComputeFaces3D_VU - integer, dimension (:,: ), pointer :: BoundaryFacesUV, kfloor_UV, kfloor_VU - integer :: di, dj + integer, dimension (:,: ), pointer :: BoundaryFacesUV, Kfloor_UV, kfloor_VU + integer :: di, dj, DirectionXY logical :: ImplicitFaces @@ -28687,13 +28664,13 @@ Subroutine WaterLevel_FlatherWindWave ( WaterFlux_XY, WaterFlux_YX, real, dimension(:,:,:), pointer :: SZZ - real, dimension(:,: ), pointer :: WaveCelerityField + real, dimension(:,: ), pointer :: WaveCelerityField, Bathymetry - real :: WaveDirection + real :: WaveDirection, AverageValue - real :: D1, D2, E1, E2, E3, E4, F1, F2, & - T1, T2, T3, T4, A_Aux, B_Aux, & + real :: D1, D2, E1, E2, E3, E4, E5, F1, & + F2, T1, T2, T3, T4, A_Aux, B_Aux,& HT_boundary, Wave_Celerity, & DT_Elevation, WaveEntering, & OldWaveEntering, ReferenceLevel @@ -28707,8 +28684,10 @@ Subroutine WaterLevel_FlatherWindWave ( WaterFlux_XY, WaterFlux_YX, XY_Component_Cart_E, & YX_Component_Cart_E, & WaterFluxBoundary, & - EnteringWaveDirection, & - LeavingVelocity !, LeavingVelocityXY + LeavingVelocity + + real :: CellRotationX, EnteringWaveDirection, WaveCellDir + real :: MinLeavingComponent, MinLeavingVelocity @@ -28727,7 +28706,8 @@ Subroutine WaterLevel_FlatherWindWave ( WaterFlux_XY, WaterFlux_YX, integer :: CHUNK - real :: dx1, dx2, dx3 + real :: dx1, dx2, dx3, AbsorbCoef + !Begin---------------------------------------------------------------- @@ -28784,11 +28764,11 @@ Subroutine WaterLevel_FlatherWindWave ( WaterFlux_XY, WaterFlux_YX, Compute_Tide = Me%ComputeOptions%Compute_Tide - if (Me%Direction%XY == DirectionX_) then + if (DirectionXY == DirectionX_) then DirBound = DirX - else if (Me%Direction%XY == DirectionY_) then + else if (DirectionXY == DirectionY_) then DirBound = DirY @@ -28797,6 +28777,12 @@ Subroutine WaterLevel_FlatherWindWave ( WaterFlux_XY, WaterFlux_YX, !End - Shorten variables name + !Gets Bathymetry + call GetGridData(Me%ObjGridData, Bathymetry, STAT = status) + + if (status /= SUCCESS_) & + call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWave - Hydrodynamic - ERR005") + cd0: if (Me%ComputeOptions%LocalSolution == Gauge_) then @@ -28893,6 +28879,7 @@ Subroutine WaterLevel_FlatherWindWave ( WaterFlux_XY, WaterFlux_YX, ID = WaterLevel_, & WaveCelerity = WaveCelerityField, & WaveDirection = WaveDirection, & + AverageValue = AverageValue, & STAT = status) if (status /= SUCCESS_) & @@ -28900,6 +28887,8 @@ Subroutine WaterLevel_FlatherWindWave ( WaterFlux_XY, WaterFlux_YX, EnteringWaveDirection = WaveDirection + BoundaryReferenceLevel(:,:) = AverageValue + else write(*,*) 'Define the analytic celerity in assimilation_x.dat for property WaterLevel_' @@ -28914,11 +28903,12 @@ Subroutine WaterLevel_FlatherWindWave ( WaterFlux_XY, WaterFlux_YX, if (MonitorPerformance) call StartWatch ("ModuleHydrodynamic", "WaterLevel_FlatherWindWave") - !$OMP PARALLEL PRIVATE(i,j,kbottom,HT_Boundary,db,i1,i2,i3,i4,j1,j2,j3,j4,Flux_WestSouth) & - !$OMP PRIVATE(Flux_EastNorth,Flux_SouthWest,Flux_NorthEast,ib,jb,ReferenceLevel) & - !$OMP PRIVATE(WaveEntering,OldWaveEntering,i_int,j_int,Wave_Celerity,XY_Component_Cart_E) & - !$OMP PRIVATE(YX_Component_Cart_E,FluxXY_E,FluxYX_E,FluxXY_T,FluxYX_T,FluxXY_L,FluxYX_L) & - !$OMP PRIVATE(FluxMod_L,LeavingVelocity,XY_Component_L,XY_Component_E,WaterFluxBoundary) & + !$OMP PARALLEL PRIVATE(i,j,kbottom,HT_Boundary,db,i1,i2,i3,i4,j1,j2,j3,j4,Flux_WestSouth) & + !$OMP PRIVATE(Flux_EastNorth,Flux_SouthWest,Flux_NorthEast,ib,jb,ReferenceLevel) & + !$OMP PRIVATE(WaveEntering,OldWaveEntering,i_int,j_int,Wave_Celerity,XY_Component_Cart_E) & + !$OMP PRIVATE(YX_Component_Cart_E,FluxXY_E,FluxYX_E,FluxXY_T,FluxYX_T,FluxXY_L,FluxYX_L) & + !$OMP PRIVATE(FluxMod_L,LeavingVelocity,XY_Component_L,XY_Component_E) & + !$OMP PRIVATE(WaveCellDir, EnteringWaveDirection, CellRotationX) & !$OMP PRIVATE(A_aux,T3,B_aux,D1,D2,E1,E2,E3,E4,F1,F2,T1,T2,T4) !$OMP DO SCHEDULE(DYNAMIC,CHUNK) @@ -28926,21 +28916,20 @@ Subroutine WaterLevel_FlatherWindWave ( WaterFlux_XY, WaterFlux_YX, do i = ILB, IUB - !In this way if in a boundary point the elevation is not change - !due to the radiation condition then - !the old elevation is maintain -!cd9: if (BoundaryPoints(i, j) == Boundary) then - - !TiCoef_2D(i, j) = WaterLevel_New(i, j) +! !In this way if in a boundary point the elevation is not change +! !due to the radiation condition then +! !the old elevation is maintain +cd9: if (BoundaryPoints(i, j) == Boundary) then - !DCoef_2D (i, j) = 0. + TiCoef_2D(i, j) = WaterLevel_New(i, j) - !ECoef_2D (i, j) = 1. + DCoef_2D (i, j) = 0. - !FCoef_2D (i, j) = 0. + ECoef_2D (i, j) = 1. + FCoef_2D (i, j) = 0. - !endif cd9 + endif cd9 cd1: if (BoundaryFacesUV (i, j ) == Boundary .and. & ComputeFaces3D_UV(i, j, KUB) == Covered .and. & @@ -28989,8 +28978,28 @@ Subroutine WaterLevel_FlatherWindWave ( WaterFlux_XY, WaterFlux_YX, endif + + !Boundary cell + !X direction (di=0,dj=1) - boundary West cell (db=0) => (ib,jb)=(i, j-1) + !X direction (di=0,dj=1) - boundary East cell (db=1) => (ib,jb)=(i, j) + !Y direction (di=1,dj=0) - boundary South cell (db=0) => (ib,jb)=(i-1, j) + !Y direction (di=1,dj=0) - boundary North cell (db=1) => (ib,jb)=(i, j) + + ib = i - di * (1 - db) + jb = j - dj * (1 - db) + + !Interior cell next to a boundary face + !X direction (di=0,dj=1) - Interior East cell (db=0) => (ib,jb)=(i, j) + !X direction (di=0,dj=1) - Interior West cell (db=1) => (ib,jb)=(i, j-1) + !Y direction (di=1,dj=0) - Interior North cell (db=0) => (ib,jb)=(i, j) + !Y direction (di=1,dj=0) - Interior South cell (db=1) => (ib,jb)=(i-1, j) + + i_int = i - di * db + j_int = j - dj * db + + !total West or South face water flux - Flux_WestSouth = 0. + Flux_WestSouth = 0. cd2: if (ComputeFaces3D_UV(i1, j1, KUB) == Covered) then @@ -29006,7 +29015,7 @@ Subroutine WaterLevel_FlatherWindWave ( WaterFlux_XY, WaterFlux_YX, !total East or North face water flux - Flux_EastNorth = 0. + Flux_EastNorth = 0. cd3: if (ComputeFaces3D_UV(i2, j2, KUB) == Covered) then @@ -29022,7 +29031,7 @@ Subroutine WaterLevel_FlatherWindWave ( WaterFlux_XY, WaterFlux_YX, !total South or West face water flux - Flux_SouthWest = 0. + Flux_SouthWest = 0. cd4: if (ComputeFaces3D_VU(i3, j3, KUB) == Covered) then @@ -29039,7 +29048,7 @@ Subroutine WaterLevel_FlatherWindWave ( WaterFlux_XY, WaterFlux_YX, !total North or East face water flux - Flux_NorthEast = 0. + Flux_NorthEast = 0. cd5: if (ComputeFaces3D_VU(i4, j4, KUB) == Covered) then @@ -29053,26 +29062,28 @@ Subroutine WaterLevel_FlatherWindWave ( WaterFlux_XY, WaterFlux_YX, endif cd5 - !Boundary cell - !X direction (di=0,dj=1) - boundary West cell (db=0) => (ib,jb)=(i, j-1) - !X direction (di=0,dj=1) - boundary East cell (db=1) => (ib,jb)=(i, j) - !Y direction (di=1,dj=0) - boundary South cell (db=0) => (ib,jb)=(i-1, j) - !Y direction (di=1,dj=0) - boundary North cell (db=1) => (ib,jb)=(i, j) + dx1 = DUX_VY(i_int, j_int) + dx2 = DUX_VY(ib, jb ) + dx3 = dx1 + dx2 - ib = i - di * (1 - db) - jb = j - dj * (1 - db) + !boundary condition is done for the cell face so the water level + !need to be interpolated form the cell centers to the boundary face + ReferenceLevel = (BoundaryReferenceLevel(ib, jb ) * dx1 + & + BoundaryReferenceLevel(i_int, j_int) * dx2 ) / dx3 - ReferenceLevel = BoundaryReferenceLevel (ib, jb) - WaveEntering = ImposedElevation (ib, jb) - ReferenceLevel - !Interior cell next to a boundary face - !X direction (di=0,dj=1) - Interior East cell (db=0) => (ib,jb)=(i, j) - !X direction (di=0,dj=1) - Interior West cell (db=1) => (ib,jb)=(i, j-1) - !Y direction (di=1,dj=0) - Interior North cell (db=0) => (ib,jb)=(i, j) - !Y direction (di=1,dj=0) - Interior South cell (db=1) => (ib,jb)=(i-1, j) + WaveEntering = (ImposedElevation(ib, jb ) * dx1 + & + ImposedElevation(i_int, j_int) * dx2 ) / dx3 + + WaveEntering = WaveEntering - ReferenceLevel + + !The local solution Gauge_ only have data for water level boundary cell + !Gauge_ local solution does not provide a water level field like the assimilation and submodel local solutions + !This problem need to be solved in the future. + if (Me%ComputeOptions%LocalSolution == Gauge_) then + WaveEntering = ImposedElevation(ib, jb) - ReferenceLevel + endif - i_int = i - di * db - j_int = j - dj * db !The wave Celerity compute in the boundary face ![m/s] = [m/s^2*m]^.5 = [m/s] @@ -29087,29 +29098,46 @@ Subroutine WaterLevel_FlatherWindWave ( WaterFlux_XY, WaterFlux_YX, elseif (Me%WindWaves%CelerityType == AnalyticWaves_) then - dx1 = DUX_VY(i_int, j_int) - dx2 = DUX_VY(ib, jb ) - dx3 = dx1 + dx2 Wave_Celerity = (WaveCelerityField(ib, jb ) * dx1 + & WaveCelerityField(i_int, j_int) * dx2 ) / dx3 endif - !If was defined a entering wave then + !If was defined a entering wave then cd15: if (Me%ComputeOptions%ComputeEnteringWave) then + call GetCellRotation(Me%ObjHorizontalGrid, ib, jb, CellRotationX, STAT = status) - !Direction - Entering wave - Cartesian referencial - XY_Component_Cart_E = dj * cos(EnteringWaveDirection) + & - di * sin(EnteringWaveDirection) - YX_Component_Cart_E = dj * sin(EnteringWaveDirection) + & - di * cos(EnteringWaveDirection) - - if (abs(XY_Component_Cart_E) < MinLeavingComponent) XY_Component_Cart_E = 0. - if (abs(YX_Component_Cart_E) < MinLeavingComponent) YX_Component_Cart_E = 1. + if (status /= SUCCESS_) then + call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWave - Hydrodynamic - ERR95") + endif + WaveCellDir = EnteringWaveDirection - CellRotationX + !Direction - Entering wave - Cartesian referencial + XY_Component_Cart_E = real(dj) * cos(WaveCellDir) + & + real(di) * sin(WaveCellDir) + YX_Component_Cart_E = real(dj) * sin(WaveCellDir) + & + real(di) * cos(WaveCellDir) + ! + if (abs(XY_Component_Cart_E) < MinLeavingComponent) then + XY_Component_Cart_E = 0. + if (YX_Component_Cart_E > 0) then + YX_Component_Cart_E = 1. + else + YX_Component_Cart_E = -1. + endif + endif + if (abs(YX_Component_Cart_E) < MinLeavingComponent) then + YX_Component_Cart_E = 0. + if (XY_Component_Cart_E > 0) then + XY_Component_Cart_E = 1. + else + XY_Component_Cart_E = -1. + endif + endif +! !If the flow of the entering wave is going from the inside the domain to the !outside then the entering flow is consider be zero @@ -29144,78 +29172,74 @@ Subroutine WaterLevel_FlatherWindWave ( WaterFlux_XY, WaterFlux_YX, WaveEntering = 0. OldWaveEntering = 0. - FluxXY_E = 0. - FluxYX_E = 0. + FluxXY_E = 0. + FluxYX_E = 0. endif cd15 + + !Land boundary = No entering wave + if ((Bathymetry(ib-di,jb-dj) <= -60.) .or. & + (Bathymetry(ib+di,jb+dj) <= -60.) .or. & + (Bathymetry(ib-dj,jb-di) <= -60.) .or. & + (Bathymetry(ib+dj,jb+di) <= -60.)) then + + XY_Component_Cart_E = 0. + WaveEntering = 0. + OldWaveEntering = 0. + + FluxXY_E = 0. + FluxYX_E = 0. + + endif !The leaving wave direction is compute in the center of the !first interior cell - !if (BoundaryPoints(i , j ) == Boundary_) then - ! FluxXY_T = Flux_WestSouth - !elseif (BoundaryPoints(i-di, j-dj) == Boundary_) then - ! FluxXY_T = Flux_EastNorth - !else - FluxXY_T = (Flux_WestSouth + Flux_EastNorth) / 2. - !endif - !if (BoundaryPoints(i , j ) == Boundary_) then - - !elseif (BoundaryPoints(i-dj, j-di) == Boundary_) then - - !else - FluxYX_T = (Flux_SouthWest + Flux_NorthEast) / 2. - !endif + FluxXY_T = (Flux_WestSouth + Flux_EastNorth) / 2. + FluxYX_T = (Flux_SouthWest + Flux_NorthEast) / 2. !Flow - Leaving wave - Cartesian referencial FluxXY_L = FluxXY_T - FluxXY_E FluxYX_L = FluxYX_T - FluxYX_E - FluxMod_L = pythag (FluxXY_L, FluxYX_L) - - LeavingVelocity = abs(FluxXY_L) / DYY_XX(i, j) / HT_Boundary - + !FluxMod_L = pythag (FluxXY_L, FluxYX_L) + FluxMod_L = (FluxXY_L**2.+FluxYX_L**2.)**0.5 - if (LeavingVelocity < MinLeavingVelocity) then + LeavingVelocity = abs(FluxXY_T) / DYY_XX(i, j) / HT_Boundary - XY_Component_L = 1. + if (LeavingVelocity < MinLeavingVelocity .and. abs(FluxXY_E) < 1.e-16) then !Null gradient -cd71: if (ImplicitFaces) then - - ECoef_2D (ib, jb) = 1 - TiCoef_2D(ib, jb) = 0 - - !west and south boundary - if (db == 0) then - DCoef_2D (ib, jb) = 0. - FCoef_2D (ib, jb) = -1. - !East and North boundary - elseif (db == 1) then - DCoef_2D (ib, jb) = -1. - FCoef_2D (ib, jb) = 0. - else - stop "WaterLevel_FlatherWindWave - Hydrodynamic - ERR110" - endif - - else cd71 + ECoef_2D (ib, jb) = 1 + TiCoef_2D(ib, jb) = 0 + !west and south boundary + if (db == 0) then DCoef_2D (ib, jb) = 0. - ECoef_2D (ib, jb) = 1. + FCoef_2D (ib, jb) = -1. + !East and North boundary + elseif (db == 1) then + DCoef_2D (ib, jb) = -1. FCoef_2D (ib, jb) = 0. - TiCoef_2D(ib, jb) = TiCoef_2D(i_int, j_int) - - endif cd71 + else + stop "WaterLevel_FlatherWindWave - Hydrodynamic - ERR110" + endif !ends do cycle cycle else - XY_Component_L = abs(FluxXY_L) / FluxMod_L + LeavingVelocity = FluxMod_L / DYY_XX(i, j) / HT_Boundary + + if (LeavingVelocity > MinLeavingVelocity) then + XY_Component_L = abs(FluxXY_L) / FluxMod_L + else + XY_Component_L = 1. + endif endif !If the flow of the leaving wave is going from inside the domain to the @@ -29223,7 +29247,7 @@ Subroutine WaterLevel_FlatherWindWave ( WaterFlux_XY, WaterFlux_YX, !be negative if (db == 0) then !West or South cell boundary ![ ] = [m^3/s] / [m^3/s] - XY_Component_E = abs(XY_Component_Cart_E) + XY_Component_E = + abs(XY_Component_Cart_E) XY_Component_L = - abs(XY_Component_L) @@ -29250,15 +29274,46 @@ Subroutine WaterLevel_FlatherWindWave ( WaterFlux_XY, WaterFlux_YX, Stop 'XY_Component_L = 1' !!!! $OMP END CRITICAL (WLFWW1_STOP01) endif + + AbsorbCoef = 1. + + !Test absorption boundaries + ! -65 80% + ! -70 60% + ! -75 50% + ! -80 40% + ! -85 10% + if (Bathymetry(ib-1,jb) == -65. .or. Bathymetry(ib+1,jb) == -65. .or. & + Bathymetry(ib,jb-1) == -65. .or. Bathymetry(ib,jb+1) == -65. ) then + AbsorbCoef = 0.8 + elseif (Bathymetry(ib-1,jb) == -70. .or. Bathymetry(ib+1,jb) == -70. .or. & + Bathymetry(ib,jb-1) == -70. .or. Bathymetry(ib,jb+1) == -70. ) then + AbsorbCoef = 0.6 + elseif (Bathymetry(ib-1,jb) == -75. .or. Bathymetry(ib+1,jb) == -75. .or. & + Bathymetry(ib,jb-1) == -75. .or. Bathymetry(ib,jb+1) == -75. ) then + AbsorbCoef = 0.5 + elseif (Bathymetry(ib-1,jb) == -80. .or. Bathymetry(ib+1,jb) == -80. .or. & + Bathymetry(ib,jb-1) == -80. .or. Bathymetry(ib,jb+1) == -80. ) then + AbsorbCoef = 0.4 + elseif (Bathymetry(ib-1,jb) == -85. .or. Bathymetry(ib+1,jb) == -85. .or. & + Bathymetry(ib,jb-1) == -85. .or. Bathymetry(ib,jb+1) == -85. ) then + AbsorbCoef = 0.1 + elseif (Bathymetry(ib-1,jb) == -89. .or. Bathymetry(ib+1,jb) == -89. .or. & + Bathymetry(ib,jb-1) == -89. .or. Bathymetry(ib,jb+1) == -89. ) then + AbsorbCoef = 0.0 + endif + + !Absorption + XY_Component_L = XY_Component_L * AbsorbCoeF if (ImplicitFaces) then ![s^-1] = [m^2/s] / [m] / [m] - A_aux = RadCoef_2D(I, J) / DYY_XX(i, j) / HT_Boundary + A_aux = RadCoef_2D (I, J) / DYY_XX(i, j) / HT_Boundary ![m/s] = [m^3/s] / [m] / [m] - T3 = + TiRadCoef_2D(I, J) / DYY_XX(i, j) / HT_Boundary + T3 = TiRadCoef_2D(I, J) / DYY_XX(i, j) / HT_Boundary else @@ -29271,41 +29326,54 @@ Subroutine WaterLevel_FlatherWindWave ( WaterFlux_XY, WaterFlux_YX, endif + - + ![m/s] = [m/s] - [m/s] * [-] T3 = T3 - ImposedVelocity(ib, jb) * XY_Component_Cart_E - ![m^-1*s^-1] = [m/s] * [ ] * [ ] / [m] / [m] - B_aux = Wave_Celerity * XY_Component_L & + ![1/(m*s)] = [m/s] * [ ] / [m] / [m] + B_aux = + Wave_Celerity * XY_Component_L & / (DUX_VY(i - di, j - dj) + DUX_VY(i, j)) / HT_Boundary - ![s^-1] = [ ] * [s^-1] + [m^-1*s^-1] * [m] + ![s^-1] = [ ] * [s^-1] D1 = - db * A_aux + + ![s^-1] = [ ] * [1/(m*s)] * [m] D2 = + db * B_aux * DUX_VY(i, j) + ![s^-1] = [ ] * [s^-1] E1 = + db * A_Aux + ![s^-1] = [ ] * [1/(m*s)] * [m] E2 = + db * B_aux * DUX_VY(i - di, j - dj) + + ![s^-1] = [ ] * [s^-1] E3 = - (1 - db) * A_aux + ![s^-1] = [ ] * [1/(m*s)] * [m] E4 = + (1 - db) * B_aux * DUX_VY(i, j) + ![s^-1] = [ ] * [s^-1] F1 = + (1 - db) * A_aux + ![s^-1] = [ ] * [1/(m*s)] * [m] F2 = + (1 - db) * B_aux * DUX_VY(i - di, j - dj) ! [s^-1] = ([m/s] / [m] ) T1 = - Wave_Celerity * XY_Component_E / HT_Boundary - T2 = + Wave_Celerity * XY_Component_L / HT_Boundary - + ! [s^-1] = ([m/s] / [m] ) + T2 = + Wave_Celerity * XY_Component_L / HT_Boundary + ! [m/s] = ([m] * [s^-1] + [m/s] + [m] * [s^-1] T4 = WaveEntering * T1 + T3 + (WaveEntering + ReferenceLevel) * T2 + E5 = E1 + E2 + E3 + E4 + cd7: if (ImplicitFaces) then DCoef_2D (ib, jb) = D1 + D2 - ECoef_2D (ib, jb) = E1 + E2 + E3 + E4 + ECoef_2D (ib, jb) = E5 FCoef_2D (ib, jb) = F1 + F2 @@ -29313,19 +29381,8 @@ Subroutine WaterLevel_FlatherWindWave ( WaterFlux_XY, WaterFlux_YX, else cd7 - - DCoef_2D (ib, jb) = 0. - - ECoef_2D (ib, jb) = 1. - - FCoef_2D (ib, jb) = 0. - - if (abs (E1 + E2 + E3 + E4) > 0) then - TiCoef_2D(ib, jb) = (T4 - (D1 + D2) * WaterLevel_New(ib - di, jb - dj) & - - (F1 + F2) * WaterLevel_New(ib + di, jb + dj))/ & - (E1 + E2 + E3 + E4) - else - TiCoef_2D(ib, jb) = 0. + if (abs(E5)>0.) then + WaterLevel_new(ib, jb) = (T4 - (D2 + F2)* WaterLevel_new(i_int, j_int)) / E5 endif endif cd7 @@ -29393,1662 +29450,12 @@ Subroutine WaterLevel_FlatherWindWave ( WaterFlux_XY, WaterFlux_YX, call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWave - Hydrodynamic - ERR170") - endif - - !Nullify auxiliar variables - - !Linear system equation - nullify (DCoef_2D, ECoef_2D, FCoef_2D, TiCoef_2D, RadCoef_2D, TiRadCoef_2D) - - !Mapping - nullify (BoundaryPoints) - - !Geometry - nullify(SZZ) - - !Hydrodynamic - nullify(WaterLevel_New) - nullify(WaterLevel_Old) - - if (associated(ImposedVelocity)) then - deallocate(ImposedVelocity) - endif - - - if (associated(BoundaryReferenceLevel)) then - deallocate(BoundaryReferenceLevel) - endif - - !---------------------------------------------------------------------- - - End Subroutine WaterLevel_FlatherWindWave - - !-------------------------------------------------------------------------- - - - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! ! - ! This subroutine compute the Sommerfeld radition condition for the open boundary ! - ! ! - ! Input : Mapping ! - ! OutPut: Water Level in the open boundary ! - ! Author: Paulo Chambel (99/6) ! - ! ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - Subroutine WaterLevel_FlatherWindWaveV2 ( ) - - !Arguments------------------------------------------------------------ - - !Local--------------------------------------------------------------------- - - real, dimension (:,: ), pointer :: WaterColumnUV, DUX_VY, DVY_UX, DYY_XX - integer, dimension (:,:,:), pointer :: ComputeFaces3D_UV, ComputeFaces3D_VU - integer, dimension (:,: ), pointer :: BoundaryFacesUV, kfloor_UV, kfloor_VU - integer :: di, dj - - real(8), dimension (:,:,:), pointer :: WaterFlux_XY, WaterFlux_YX - integer :: i, j, k - integer, pointer, dimension (:,:) :: BoundaryPoints - - - real(8), dimension(:,:), pointer :: ECoef_2D - real, dimension(:,:), pointer :: DCoef_2D, FCoef_2D, TiCoef_2D, & - ImposedElevation, & - ImposedVelocity, & - WaterLevel_New, BoundaryReferenceLevel,& - RadCoef_2D, TiRadCoef_2D, WaterLevel_Old - - - real, dimension(:,:,:), pointer :: SZZ - - real, dimension(:,: ), pointer :: WaveCelerityField - - real :: WaveDirection, AverageValue - - - real :: D1, D2, E1, E2, E3, E4, F1, F2, & - T1, T2, T3, T4, A_Aux, B_Aux, & - HT_boundary, Wave_Celerity, & - DT_Elevation, WaveEntering, & - OldWaveEntering, ReferenceLevel - - real(8) :: FluxXY_L, FluxYX_L, FluxMod_L, & - FluxXY_E, FluxYX_E, & - FluxXY_T, FluxYX_T, & - Flux_WestSouth, Flux_EastNorth, & - Flux_SouthWest, Flux_NorthEast, & - XY_Component_L, XY_Component_E, & - XY_Component_Cart_E, & - YX_Component_Cart_E, & - LeavingVelocity - - real :: CellRotation, EnteringWaveDirection, WaveCellDir - - - real :: MinLeavingComponent, MinLeavingVelocity - - - integer :: IUB, ILB, JUB, JLB, KUB, & - i1, i2, i3, i4, j1, j2, j3, j4, & - db, kbottom, & - ib, jb, i_int, j_int - - logical :: Compute_Tide - - integer :: status - - integer :: DirX, DirY, DirBound - - integer :: CHUNK - - real :: dx1, dx2, dx3 - - !Begin---------------------------------------------------------------- - - - !Begin - Shorten variables name - - IUB = Me%WorkSize%IUB - ILB = Me%WorkSize%ILB - JUB = Me%WorkSize%JUB - JLB = Me%WorkSize%JLB - KUB = Me%WorkSize%KUB - - di = Me%Direction%di - dj = Me%Direction%dj - - DT_Elevation = Me%WaterLevel%DT - - DCoef_2D => Me%Coef%D2%D - ECoef_2D => Me%Coef%D2%E - FCoef_2D => Me%Coef%D2%F - TiCoef_2D => Me%Coef%D2%Ti - - RadCoef_2D => Me%Coef%D2%Rad - TiRadCoef_2D => Me%Coef%D2%TiRad - - SZZ => Me%External_Var%SZZ - - !Geometry - WaterColumnUV => Me%External_Var%WaterColumnUV - DUX_VY => Me%External_Var%DUX_VY - DVY_UX => Me%External_Var%DVY_UX - DYY_XX => Me%External_Var%DYY_XX - - kfloor_UV => Me%External_Var%kfloor_UV - kfloor_VU => Me%External_Var%kfloor_VU - - - - !Flow - WaterFlux_XY => Me%WaterFluxes%XY - WaterFlux_YX => Me%WaterFluxes%YX - WaterLevel_New => Me%WaterLevel%New - WaterLevel_Old => Me%WaterLevel%Old - - - BoundaryFacesUV => Me%External_Var%BoundaryFacesUV - BoundaryPoints => Me%External_Var%BoundaryPoints - - ComputeFaces3D_UV => Me%External_Var%ComputeFaces3D_UV - ComputeFaces3D_VU => Me%External_Var%ComputeFaces3D_VU - - EnteringWaveDirection = Me%ComputeOptions%EnteringWaveDirection - - MinLeavingComponent = Me%ComputeOptions%MinLeavingComponent - MinLeavingVelocity = Me%ComputeOptions%MinLeavingVelocity - - - Compute_Tide = Me%ComputeOptions%Compute_Tide - - if (Me%Direction%XY == DirectionX_) then - - DirBound = DirX - - else if (Me%Direction%XY == DirectionY_) then - - DirBound = DirY - - endif - - - !End - Shorten variables name - -cd0: if (Me%ComputeOptions%LocalSolution == Gauge_) then - - - call Modify_OpenBoundary(Me%ObjOpenBoundary, & - Me%CurrentTime, & - Me%External_Var%AtmosphericPressure, & - Me%ComputeOptions%AtmosphereCoef, & - Me%ComputeOptions%InvertBaroCoef, & - Me%ComputeOptions%AtmSeaLevelReference, & - STAT = status) - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV2 - Hydrodynamic - ERR10") - - - call GetImposedElevation(Me%ObjOpenBoundary, & - ImposedElevation, STAT = status) - - - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV2 - Hydrodynamic - ERR20") - - call GetOpenBoundParameter(Me%ObjOpenBoundary, DirectionX = DirX, & - DirectionY = DirY, STAT= status) - - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV2 - Hydrodynamic - ERR30") - - - - call GetImposedVelocity (Me%ObjOpenBoundary, ImposedVelocity, & - DirBound, STAT= status) - - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV2 - Hydrodynamic - ERR40") - - !PCL - - cd23: if (Me%Relaxation%RefBoundWaterLevel) then - - call GetAssimilationField(Me%ObjAssimilation, & - ID = WaterLevel_, & - Field2D = BoundaryReferenceLevel, & - STAT = status) - - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV2 - Hydrodynamic - ERR50") - - - else cd23 - - call GetBoundaryReferenceLevel(Me%ObjOpenBoundary, & - BoundaryReferenceLevel, STAT = status) - - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV2 - Hydrodynamic - ERR60") - - - endif cd23 - - elseif (Me%ComputeOptions%LocalSolution == AssimilationField_) then cd0 - - - call GetAssimilationField(Me%ObjAssimilation, & - ID = WaterLevel_, & - Field2D = ImposedElevation, & - STAT = status) - - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV2 - Hydrodynamic - ERR70") - - - if (.not.associated(ImposedVelocity)) then - allocate(ImposedVelocity(ILB:IUB,JLB:JUB)) - endif - - ImposedVelocity(:,:) = 0. - - if (.not.associated(BoundaryReferenceLevel)) then - allocate(BoundaryReferenceLevel(ILB:IUB,JLB:JUB)) - endif - BoundaryReferenceLevel(:,:) = 0. - - else cd0 - - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV2 - Hydrodynamic - ERR80") - - endif cd0 - - if (Me%WindWaves%CelerityType == AnalyticWaves_) then - - if (Me%ComputeOptions%LocalSolution == AssimilationField_) then - - call GetWaveCelerityField(AssimilationID = Me%ObjAssimilation, & - ID = WaterLevel_, & - WaveCelerity = WaveCelerityField, & - WaveDirection = WaveDirection, & - AverageValue = AverageValue, & - STAT = status) - - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV2 - Hydrodynamic - ERR90") - - EnteringWaveDirection = WaveDirection - - BoundaryReferenceLevel(:,:) = AverageValue - - else - - write(*,*) 'Define the analytic celerity in assimilation_x.dat for property WaterLevel_' - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV2 - Hydrodynamic - ERR100") - - endif - - - endif - - CHUNK = CHUNK_J(JLB, JUB) - - if (MonitorPerformance) call StartWatch ("ModuleHydrodynamic", "WaterLevel_FlatherWindWaveV2") - - !$OMP PARALLEL PRIVATE(i,j,kbottom,HT_Boundary,db,i1,i2,i3,i4,j1,j2,j3,j4,Flux_WestSouth) & - !$OMP PRIVATE(Flux_EastNorth,Flux_SouthWest,Flux_NorthEast,ib,jb,ReferenceLevel) & - !$OMP PRIVATE(WaveEntering,OldWaveEntering,i_int,j_int,Wave_Celerity,XY_Component_Cart_E) & - !$OMP PRIVATE(YX_Component_Cart_E,FluxXY_E,FluxYX_E,FluxXY_T,FluxYX_T,FluxXY_L,FluxYX_L) & - !$OMP PRIVATE(FluxMod_L,LeavingVelocity,XY_Component_L,XY_Component_E) & - !$OMP PRIVATE(WaveCellDir, EnteringWaveDirection, CellRotation) & - !$OMP PRIVATE(A_aux,T3,B_aux,D1,D2,E1,E2,E3,E4,F1,F2,T1,T2,T4) - - !$OMP DO SCHEDULE(DYNAMIC,CHUNK) - do j = JLB, JUB - do i = ILB, IUB - - - !In this way if in a boundary point the elevation is not change - !due to the radiation condition then - !the old elevation is maintain -cd9: if (BoundaryPoints(i, j) == Boundary) then - - TiCoef_2D(i, j) = WaterLevel_New(i, j) - - DCoef_2D (i, j) = 0. - - ECoef_2D (i, j) = 1. - - FCoef_2D (i, j) = 0. - - - endif cd9 - -cd1: if (BoundaryFacesUV (i, j ) == Boundary .and. & - ComputeFaces3D_UV(i, j, KUB) == Covered .and. & - (BoundaryPoints (i, j) == Not_Boundary .or. & - BoundaryPoints (i-di, j-dj) == Not_Boundary)) then - - - kbottom = kfloor_UV(i, j) - - ![m] = [m^2]/[m] - HT_boundary = WaterColumnUV(i, j) - - - !Direction - Leaving wave - if (BoundaryPoints(i, j) == Boundary) then - - !West or South cell is interior and - !the East or North cell is boundary - db = 1 - - i1 = i - di - i2 = i - i3 = i - di - i4 = i + dj - di - j1 = j - dj - j2 = j - j3 = j - dj - j4 = j - dj + di - - - else - - !West or South cell is boundary and - !the East or North cell is interior - db = 0 - - i1 = i - i2 = i + di - i3 = i - i4 = i + dj - j1 = j - j2 = j + dj - j3 = j - j4 = j + di - - - endif - - - !Boundary cell - !X direction (di=0,dj=1) - boundary West cell (db=0) => (ib,jb)=(i, j-1) - !X direction (di=0,dj=1) - boundary East cell (db=1) => (ib,jb)=(i, j) - !Y direction (di=1,dj=0) - boundary South cell (db=0) => (ib,jb)=(i-1, j) - !Y direction (di=1,dj=0) - boundary North cell (db=1) => (ib,jb)=(i, j) - - ib = i - di * (1 - db) - jb = j - dj * (1 - db) - - !Interior cell next to a boundary face - !X direction (di=0,dj=1) - Interior East cell (db=0) => (ib,jb)=(i, j) - !X direction (di=0,dj=1) - Interior West cell (db=1) => (ib,jb)=(i, j-1) - !Y direction (di=1,dj=0) - Interior North cell (db=0) => (ib,jb)=(i, j) - !Y direction (di=1,dj=0) - Interior South cell (db=1) => (ib,jb)=(i-1, j) - - i_int = i - di * db - j_int = j - dj * db - - - !total West or South face water flux - Flux_WestSouth = 0. - -cd2: if (ComputeFaces3D_UV(i1, j1, KUB) == Covered) then - - kbottom = kfloor_UV(i1, j1) - - do k = kbottom, KUB - - Flux_WestSouth = Flux_WestSouth + WaterFlux_XY(i1, j1, k) - - enddo - - endif cd2 - - - !total East or North face water flux - Flux_EastNorth = 0. - -cd3: if (ComputeFaces3D_UV(i2, j2, KUB) == Covered) then - - kbottom = kfloor_UV(i2, j2) - - do k = kbottom, KUB - - Flux_EastNorth = Flux_EastNorth + WaterFlux_XY(i2, j2, k) - - enddo - - endif cd3 - - - !total South or West face water flux - Flux_SouthWest = 0. - -cd4: if (ComputeFaces3D_VU(i3, j3, KUB) == Covered) then - - kbottom = kfloor_VU(i3, j3) - - do k = kbottom, KUB - - Flux_SouthWest = Flux_SouthWest + WaterFlux_YX(i3, j3, k) - - enddo - - endif cd4 - - - !total North or East face water flux - - Flux_NorthEast = 0. - -cd5: if (ComputeFaces3D_VU(i4, j4, KUB) == Covered) then - - kbottom = kfloor_VU(i4, j4) - - do k = kbottom, KUB - - Flux_NorthEast = Flux_NorthEast + WaterFlux_YX(i4, j4, k) - - enddo - - endif cd5 - - dx1 = DUX_VY(i_int, j_int) - dx2 = DUX_VY(ib, jb ) - dx3 = dx1 + dx2 - - !boundary condition is done for the cell face so the water level - !need to be interpolated form the cell centers to the boundary face - ReferenceLevel = (BoundaryReferenceLevel(ib, jb ) * dx1 + & - BoundaryReferenceLevel(i_int, j_int) * dx2 ) / dx3 - - - WaveEntering = (ImposedElevation(ib, jb ) * dx1 + & - ImposedElevation(i_int, j_int) * dx2 ) / dx3 - - WaveEntering = WaveEntering - ReferenceLevel - - !The local solution Gauge_ only have data for water level boundary cell - !Gauge_ local solution does not provide a water level field like the assimilation and submodel local solutions - !This problem need to be solved in the future. - if (Me%ComputeOptions%LocalSolution == Gauge_) then - WaveEntering = ImposedElevation(ib, jb) - ReferenceLevel - endif - - !The wave Celerity compute in the boundary face - ![m/s] = [m/s^2*m]^.5 = [m/s] - if (Me%WindWaves%CelerityType == LongWaves_) then - - Wave_Celerity = sqrt(Gravity * HT_Boundary) - - elseif (Me%WindWaves%CelerityType == Constant_ ) then - - Wave_Celerity = Me%WindWaves%CelerityConstant - - elseif (Me%WindWaves%CelerityType == AnalyticWaves_) then - - - Wave_Celerity = (WaveCelerityField(ib, jb ) * dx1 + & - WaveCelerityField(i_int, j_int) * dx2 ) / dx3 - - endif - - !If was defined a entering wave then -cd15: if (Me%ComputeOptions%ComputeEnteringWave) then - - call GetCellRotation(Me%ObjHorizontalGrid, ib, jb, CellRotation, STAT = status) - - if (status /= SUCCESS_) then - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV2 - Hydrodynamic - ERR95") - endif - - WaveCellDir = EnteringWaveDirection - CellRotation - - !Direction - Entering wave - Cartesian referencial - XY_Component_Cart_E = dj * cos(WaveCellDir) + & - di * sin(WaveCellDir) - YX_Component_Cart_E = dj * sin(WaveCellDir) + & - di * cos(WaveCellDir) - - if (abs(XY_Component_Cart_E) < MinLeavingComponent) then - XY_Component_Cart_E = 0. - if (YX_Component_Cart_E > 0) then - YX_Component_Cart_E = 1. - else - YX_Component_Cart_E = -1. - endif - endif - if (abs(YX_Component_Cart_E) < MinLeavingComponent) then - YX_Component_Cart_E = 0. - if (XY_Component_Cart_E > 0) then - XY_Component_Cart_E = 1. - else - XY_Component_Cart_E = -1. - endif - endif - - - - - !If the flow of the entering wave is going from the inside the domain to the - !outside then the entering flow is consider be zero - - if ((XY_Component_Cart_E <= 0 .and. db == 0) .or. & !West or South cell boundary - (XY_Component_Cart_E >= 0 .and. db == 1)) then !East or North cell boundary - - XY_Component_Cart_E = 0. - - WaveEntering = 0. - OldWaveEntering = 0. - - endif - - !Flow - Entering wave - Cartesian referencial. In necessary to compute - !the entering fluxes in cartesian referencial to be consistent witht the - !total fluxes - - ![m^3/s] = [m] * [m/s] * [ ] * [m] - FluxXY_E = WaveEntering * Wave_Celerity * & - XY_Component_Cart_E * DVY_UX(i, j) - - ![m^3/s] = [m] * [m/s] * [ ] * [m] - FluxYX_E = WaveEntering * Wave_Celerity * & - YX_Component_Cart_E * DUX_VY(i, j) - - else cd15 - - XY_Component_Cart_E = 0. - - WaveEntering = 0. - OldWaveEntering = 0. - - FluxXY_E = 0. - FluxYX_E = 0. - - endif cd15 - - !The leaving wave direction is compute in the center of the - !first interior cell - FluxXY_T = (Flux_WestSouth + Flux_EastNorth) / 2. - FluxYX_T = (Flux_SouthWest + Flux_NorthEast) / 2. - - - !Flow - Leaving wave - Cartesian referencial - FluxXY_L = FluxXY_T - FluxXY_E - FluxYX_L = FluxYX_T - FluxYX_E - - FluxMod_L = pythag (FluxXY_L, FluxYX_L) - - LeavingVelocity = FluxMod_L / DYY_XX(i, j) / HT_Boundary - - if (LeavingVelocity < MinLeavingVelocity) then - - !Null gradient - ECoef_2D (ib, jb) = 1 - TiCoef_2D(ib, jb) = 0 - - !west and south boundary - if (db == 0) then - DCoef_2D (ib, jb) = 0. - FCoef_2D (ib, jb) = -1. - !East and North boundary - elseif (db == 1) then - DCoef_2D (ib, jb) = -1. - FCoef_2D (ib, jb) = 0. - else - stop "WaterLevel_FlatherWindWaveV2 - Hydrodynamic - ERR110" - endif - - !ends do cycle - cycle - - else - - if (FluxMod_L>0) then - XY_Component_L = abs(FluxXY_L) / FluxMod_L - else - XY_Component_L = 0. - endif - - endif - - !If the flow of the leaving wave is going from inside the domain to the - !outside then the flow must be positive in the oposite condition it must - !be negative - if (db == 0) then !West or South cell boundary - ![ ] = [m^3/s] / [m^3/s] - XY_Component_E = + abs(XY_Component_Cart_E) - - XY_Component_L = - abs(XY_Component_L) - - else if (db == 1) then !East or North cell boundary - - ![ ] = [m^3/s] / [m^3/s] - XY_Component_E = - abs(XY_Component_Cart_E) - - XY_Component_L = + abs(XY_Component_L) - - endif - - - if (abs(XY_Component_L) > 1. ) then - !!!! $OMP CRITICAL (WLFWW1_STOP01) - Stop 'XY_Component_L = 1' - !!!! $OMP END CRITICAL (WLFWW1_STOP01) - endif - - - ![s^-1] = [m^2/s] / [m] / [m] - A_aux = RadCoef_2D (I, J) / DYY_XX(i, j) / HT_Boundary - - ![m/s] = [m^3/s] / [m] / [m] - T3 = TiRadCoef_2D(I, J) / DYY_XX(i, j) / HT_Boundary - - ![m/s] = [m/s] - [m/s] * [-] - T3 = T3 - ImposedVelocity(ib, jb) * XY_Component_Cart_E - - ![1/(m*s)] = [m/s] * [ ] / [m] / [m] - B_aux = + Wave_Celerity * XY_Component_L & - / (DUX_VY(i - di, j - dj) + DUX_VY(i, j)) / HT_Boundary - - - ![s^-1] = [ ] * [s^-1] - D1 = - db * A_aux - - ![s^-1] = [ ] * [1/(m*s)] * [m] - D2 = + db * B_aux * DUX_VY(i, j) - - ![s^-1] = [ ] * [s^-1] - E1 = + db * A_Aux - ![s^-1] = [ ] * [1/(m*s)] * [m] - E2 = + db * B_aux * DUX_VY(i - di, j - dj) - - ![s^-1] = [ ] * [s^-1] - E3 = - (1 - db) * A_aux - ![s^-1] = [ ] * [1/(m*s)] * [m] - E4 = + (1 - db) * B_aux * DUX_VY(i, j) - - ![s^-1] = [ ] * [s^-1] - F1 = + (1 - db) * A_aux - ![s^-1] = [ ] * [1/(m*s)] * [m] - F2 = + (1 - db) * B_aux * DUX_VY(i - di, j - dj) - - ! [s^-1] = ([m/s] / [m] ) - T1 = - Wave_Celerity * XY_Component_E / HT_Boundary - - ! [s^-1] = ([m/s] / [m] ) - T2 = + Wave_Celerity * XY_Component_L / HT_Boundary - - ! [m/s] = ([m] * [s^-1] + [m/s] + [m] * [s^-1] - T4 = WaveEntering * T1 + T3 + (WaveEntering + ReferenceLevel) * T2 - - DCoef_2D (ib, jb) = D1 + D2 - - ECoef_2D (ib, jb) = E1 + E2 + E3 + E4 - - FCoef_2D (ib, jb) = F1 + F2 - - TiCoef_2D(ib, jb) = T4 - - endif cd1 - - enddo - enddo - !$OMP END DO - !$OMP END PARALLEL - - if (MonitorPerformance) call StopWatch ("ModuleHydrodynamic", "WaterLevel_FlatherWindWaveV2") - - -cd21: if (Me%ComputeOptions%LocalSolution == Gauge_) then - - call UnGetOpenBoundary(Me%ObjOpenBoundary, ImposedElevation, STAT = status) - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV2 - Hydrodynamic - ERR120") - - call UnGetOpenBoundary(Me%ObjOpenBoundary, ImposedVelocity, STAT = status) - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV2 - Hydrodynamic - ERR130") - - - - if (Me%Relaxation%RefBoundWaterLevel) then - - call UnGetAssimilation(Me%ObjAssimilation, & - BoundaryReferenceLevel, STAT = status) - - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV2 - Hydrodynamic - ERR140") - - - else - - call UnGetOpenBoundary(Me%ObjOpenBoundary, BoundaryReferenceLevel, STAT = status) - - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV2 - Hydrodynamic - ERR150") - - - endif - - - elseif (Me%ComputeOptions%LocalSolution == AssimilationField_) then cd21 - - - call UnGetAssimilation(Me%ObjAssimilation, & - ImposedElevation, STAT = status) - - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV2 - Hydrodynamic - ERR160") - - endif cd21 - - if (Me%WindWaves%CelerityType == AnalyticWaves_) then - - call UnGetAssimilation(Me%ObjAssimilation, & - WaveCelerityField, STAT = status) - - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV2 - Hydrodynamic - ERR170") - - - endif - - !Nullify auxiliar variables - - !Linear system equation - nullify (DCoef_2D, ECoef_2D, FCoef_2D, TiCoef_2D, RadCoef_2D, TiRadCoef_2D) - - !Mapping - nullify (BoundaryPoints) - - !Geometry - nullify(SZZ) - - !Hydrodynamic - nullify(WaterLevel_New) - nullify(WaterLevel_Old) - - if (associated(ImposedVelocity)) then - deallocate(ImposedVelocity) - endif - - - if (associated(BoundaryReferenceLevel)) then - deallocate(BoundaryReferenceLevel) - endif - - !---------------------------------------------------------------------- - - End Subroutine WaterLevel_FlatherWindWaveV2 - - !-------------------------------------------------------------------------- - - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! ! - ! This subroutine compute the Sommerfeld radition condition for the open boundary ! - ! ! - ! Input : Mapping ! - ! OutPut: Water Level in the open boundary ! - ! Author: Paulo Chambel (99/6) ! - ! ! - !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - - Subroutine WaterLevel_FlatherWindWaveV3 ( WaterFlux_XY, WaterFlux_YX, & - WaterColumnUV, DUX_VY, DVY_UX, DYY_XX, & - ComputeFaces3D_UV, ComputeFaces3D_VU, & - BoundaryFacesUV, kfloor_UV, kfloor_VU, & - di, dj, DirectionXY, ImplicitFaces) - - !Arguments------------------------------------------------------------ - - real(8), dimension (:,:,:), pointer :: WaterFlux_XY, WaterFlux_YX - real, dimension (:,: ), pointer :: WaterColumnUV, DUX_VY, DVY_UX, DYY_XX - integer, dimension (:,:,:), pointer :: ComputeFaces3D_UV, ComputeFaces3D_VU - integer, dimension (:,: ), pointer :: BoundaryFacesUV, Kfloor_UV, kfloor_VU - integer :: di, dj, DirectionXY - logical :: ImplicitFaces - - - !Local--------------------------------------------------------------------- - integer :: i, j, k - integer, pointer, dimension (:,:) :: BoundaryPoints - - - real(8), dimension(:,:), pointer :: ECoef_2D - real, dimension(:,:), pointer :: DCoef_2D, FCoef_2D, TiCoef_2D, & - ImposedElevation, & - ImposedVelocity, & - WaterLevel_New, BoundaryReferenceLevel,& - RadCoef_2D, TiRadCoef_2D, WaterLevel_Old - - - real, dimension(:,:,:), pointer :: SZZ - - real, dimension(:,: ), pointer :: WaveCelerityField, Bathymetry - - real :: WaveDirection, AverageValue - - - real :: D1, D2, E1, E2, E3, E4, E5, F1, & - F2, T1, T2, T3, T4, A_Aux, B_Aux,& - HT_boundary, Wave_Celerity, & - DT_Elevation, WaveEntering, & - OldWaveEntering, ReferenceLevel - - real(8) :: FluxXY_L, FluxYX_L, FluxMod_L, & - FluxXY_E, FluxYX_E, & - FluxXY_T, FluxYX_T, & - Flux_WestSouth, Flux_EastNorth, & - Flux_SouthWest, Flux_NorthEast, & - XY_Component_L, XY_Component_E, & - XY_Component_Cart_E, & - YX_Component_Cart_E, & - WaterFluxBoundary, & - LeavingVelocity - - real :: CellRotation, EnteringWaveDirection, WaveCellDir - - - real :: MinLeavingComponent, MinLeavingVelocity - - - integer :: IUB, ILB, JUB, JLB, KUB, & - i1, i2, i3, i4, j1, j2, j3, j4, & - db, kbottom, & - ib, jb, i_int, j_int - - logical :: Compute_Tide - - integer :: status - - integer :: DirX, DirY, DirBound - - integer :: CHUNK - - real :: dx1, dx2, dx3, AbsorbCoef - - - !Begin---------------------------------------------------------------- - - - !Begin - Shorten variables name - - IUB = Me%WorkSize%IUB - ILB = Me%WorkSize%ILB - JUB = Me%WorkSize%JUB - JLB = Me%WorkSize%JLB - KUB = Me%WorkSize%KUB - - DT_Elevation = Me%WaterLevel%DT - - DCoef_2D => Me%Coef%D2%D - ECoef_2D => Me%Coef%D2%E - FCoef_2D => Me%Coef%D2%F - TiCoef_2D => Me%Coef%D2%Ti - - RadCoef_2D => Me%Coef%D2%Rad - TiRadCoef_2D => Me%Coef%D2%TiRad - - SZZ => Me%External_Var%SZZ - - !Geometry -! WaterColumnUV => Me%External_Var%WaterColumnUV -! DUX_VY => Me%External_Var%DUX_VY -! DVY_UX => Me%External_Var%DVY_UX -! DYY_XX => Me%External_Var%DYY_XX - -! kfloor_UV => Me%External_Var%kfloor_UV -! kfloor_VU => Me%External_Var%kfloor_VU - - - - !Flow -! WaterFlux_XY => Me%WaterFluxes%XY -! WaterFlux_YX => Me%WaterFluxes%YX - WaterLevel_New => Me%WaterLevel%New - WaterLevel_Old => Me%WaterLevel%Old - - -! BoundaryFacesUV => Me%External_Var%BoundaryFacesUV - BoundaryPoints => Me%External_Var%BoundaryPoints - -! ComputeFaces3D_UV => Me%External_Var%ComputeFaces3D_UV -! ComputeFaces3D_VU => Me%External_Var%ComputeFaces3D_VU - - EnteringWaveDirection = Me%ComputeOptions%EnteringWaveDirection - - MinLeavingComponent = Me%ComputeOptions%MinLeavingComponent - MinLeavingVelocity = Me%ComputeOptions%MinLeavingVelocity - - - Compute_Tide = Me%ComputeOptions%Compute_Tide - - if (DirectionXY == DirectionX_) then - - DirBound = DirX - - else if (DirectionXY == DirectionY_) then - - DirBound = DirY - - endif - - - !End - Shorten variables name - - !Gets Bathymetry - call GetGridData(Me%ObjGridData, Bathymetry, STAT = status) - - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV3 - Hydrodynamic - ERR005") - -cd0: if (Me%ComputeOptions%LocalSolution == Gauge_) then - - - call Modify_OpenBoundary(Me%ObjOpenBoundary, & - Me%CurrentTime, & - Me%External_Var%AtmosphericPressure, & - Me%ComputeOptions%AtmosphereCoef, & - Me%ComputeOptions%InvertBaroCoef, & - Me%ComputeOptions%AtmSeaLevelReference, & - STAT = status) - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV3 - Hydrodynamic - ERR10") - - - call GetImposedElevation(Me%ObjOpenBoundary, & - ImposedElevation, STAT = status) - - - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV3 - Hydrodynamic - ERR20") - - call GetOpenBoundParameter(Me%ObjOpenBoundary, DirectionX = DirX, & - DirectionY = DirY, STAT= status) - - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV3 - Hydrodynamic - ERR30") - - - - call GetImposedVelocity (Me%ObjOpenBoundary, ImposedVelocity, & - DirBound, STAT= status) - - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV3 - Hydrodynamic - ERR40") - - !PCL - - cd23: if (Me%Relaxation%RefBoundWaterLevel) then - - call GetAssimilationField(Me%ObjAssimilation, & - ID = WaterLevel_, & - Field2D = BoundaryReferenceLevel, & - STAT = status) - - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV3 - Hydrodynamic - ERR50") - - - else cd23 - - call GetBoundaryReferenceLevel(Me%ObjOpenBoundary, & - BoundaryReferenceLevel, STAT = status) - - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV3 - Hydrodynamic - ERR60") - - - endif cd23 - - elseif (Me%ComputeOptions%LocalSolution == AssimilationField_) then cd0 - - - call GetAssimilationField(Me%ObjAssimilation, & - ID = WaterLevel_, & - Field2D = ImposedElevation, & - STAT = status) - - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV3 - Hydrodynamic - ERR70") - - - if (.not.associated(ImposedVelocity)) then - allocate(ImposedVelocity(ILB:IUB,JLB:JUB)) - endif - - ImposedVelocity(:,:) = 0. - - if (.not.associated(BoundaryReferenceLevel)) then - allocate(BoundaryReferenceLevel(ILB:IUB,JLB:JUB)) - endif - BoundaryReferenceLevel(:,:) = 0. - - else cd0 - - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV3 - Hydrodynamic - ERR80") - - endif cd0 - - if (Me%WindWaves%CelerityType == AnalyticWaves_) then - - if (Me%ComputeOptions%LocalSolution == AssimilationField_) then - - call GetWaveCelerityField(AssimilationID = Me%ObjAssimilation, & - ID = WaterLevel_, & - WaveCelerity = WaveCelerityField, & - WaveDirection = WaveDirection, & - AverageValue = AverageValue, & - STAT = status) - - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV3 - Hydrodynamic - ERR90") - - EnteringWaveDirection = WaveDirection - - BoundaryReferenceLevel(:,:) = AverageValue - - else - - write(*,*) 'Define the analytic celerity in assimilation_x.dat for property WaterLevel_' - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV3 - Hydrodynamic - ERR100") - - endif - - - endif - - CHUNK = CHUNK_J(JLB, JUB) - - if (MonitorPerformance) call StartWatch ("ModuleHydrodynamic", "WaterLevel_FlatherWindWaveV3") - - !$OMP PARALLEL PRIVATE(i,j,kbottom,HT_Boundary,db,i1,i2,i3,i4,j1,j2,j3,j4,Flux_WestSouth) & - !$OMP PRIVATE(Flux_EastNorth,Flux_SouthWest,Flux_NorthEast,ib,jb,ReferenceLevel) & - !$OMP PRIVATE(WaveEntering,OldWaveEntering,i_int,j_int,Wave_Celerity,XY_Component_Cart_E) & - !$OMP PRIVATE(YX_Component_Cart_E,FluxXY_E,FluxYX_E,FluxXY_T,FluxYX_T,FluxXY_L,FluxYX_L) & - !$OMP PRIVATE(FluxMod_L,LeavingVelocity,XY_Component_L,XY_Component_E) & - !$OMP PRIVATE(WaveCellDir, EnteringWaveDirection, CellRotation) & - !$OMP PRIVATE(A_aux,T3,B_aux,D1,D2,E1,E2,E3,E4,F1,F2,T1,T2,T4) - - !$OMP DO SCHEDULE(DYNAMIC,CHUNK) - do j = JLB, JUB - do i = ILB, IUB - - -! !In this way if in a boundary point the elevation is not change -! !due to the radiation condition then -! !the old elevation is maintain -cd9: if (BoundaryPoints(i, j) == Boundary) then - - TiCoef_2D(i, j) = WaterLevel_New(i, j) - - DCoef_2D (i, j) = 0. - - ECoef_2D (i, j) = 1. - - FCoef_2D (i, j) = 0. - - endif cd9 - -cd1: if (BoundaryFacesUV (i, j ) == Boundary .and. & - ComputeFaces3D_UV(i, j, KUB) == Covered .and. & - (BoundaryPoints (i, j) == Not_Boundary .or. & - BoundaryPoints (i-di, j-dj) == Not_Boundary)) then - - - kbottom = kfloor_UV(i, j) - - ![m] = [m^2]/[m] - HT_boundary = WaterColumnUV(i, j) - - - !Direction - Leaving wave - if (BoundaryPoints(i, j) == Boundary) then - - !West or South cell is interior and - !the East or North cell is boundary - db = 1 - - i1 = i - di - i2 = i - i3 = i - di - i4 = i + dj - di - j1 = j - dj - j2 = j - j3 = j - dj - j4 = j - dj + di - - - else - - !West or South cell is boundary and - !the East or North cell is interior - db = 0 - - i1 = i - i2 = i + di - i3 = i - i4 = i + dj - j1 = j - j2 = j + dj - j3 = j - j4 = j + di - - - endif - - - !Boundary cell - !X direction (di=0,dj=1) - boundary West cell (db=0) => (ib,jb)=(i, j-1) - !X direction (di=0,dj=1) - boundary East cell (db=1) => (ib,jb)=(i, j) - !Y direction (di=1,dj=0) - boundary South cell (db=0) => (ib,jb)=(i-1, j) - !Y direction (di=1,dj=0) - boundary North cell (db=1) => (ib,jb)=(i, j) - - ib = i - di * (1 - db) - jb = j - dj * (1 - db) - - !Interior cell next to a boundary face - !X direction (di=0,dj=1) - Interior East cell (db=0) => (ib,jb)=(i, j) - !X direction (di=0,dj=1) - Interior West cell (db=1) => (ib,jb)=(i, j-1) - !Y direction (di=1,dj=0) - Interior North cell (db=0) => (ib,jb)=(i, j) - !Y direction (di=1,dj=0) - Interior South cell (db=1) => (ib,jb)=(i-1, j) - - i_int = i - di * db - j_int = j - dj * db - - - !total West or South face water flux - Flux_WestSouth = 0. - -cd2: if (ComputeFaces3D_UV(i1, j1, KUB) == Covered) then - - kbottom = kfloor_UV(i1, j1) - - do k = kbottom, KUB - - Flux_WestSouth = Flux_WestSouth + WaterFlux_XY(i1, j1, k) - - enddo - - endif cd2 - - - !total East or North face water flux - Flux_EastNorth = 0. - -cd3: if (ComputeFaces3D_UV(i2, j2, KUB) == Covered) then - - kbottom = kfloor_UV(i2, j2) - - do k = kbottom, KUB - - Flux_EastNorth = Flux_EastNorth + WaterFlux_XY(i2, j2, k) - - enddo - - endif cd3 - - - !total South or West face water flux - Flux_SouthWest = 0. - -cd4: if (ComputeFaces3D_VU(i3, j3, KUB) == Covered) then - - kbottom = kfloor_VU(i3, j3) - - do k = kbottom, KUB - - Flux_SouthWest = Flux_SouthWest + WaterFlux_YX(i3, j3, k) - - enddo - - endif cd4 - - - !total North or East face water flux - - Flux_NorthEast = 0. - -cd5: if (ComputeFaces3D_VU(i4, j4, KUB) == Covered) then - - kbottom = kfloor_VU(i4, j4) - - do k = kbottom, KUB - - Flux_NorthEast = Flux_NorthEast + WaterFlux_YX(i4, j4, k) - - enddo - - endif cd5 - - dx1 = DUX_VY(i_int, j_int) - dx2 = DUX_VY(ib, jb ) - dx3 = dx1 + dx2 - - !boundary condition is done for the cell face so the water level - !need to be interpolated form the cell centers to the boundary face - ReferenceLevel = (BoundaryReferenceLevel(ib, jb ) * dx1 + & - BoundaryReferenceLevel(i_int, j_int) * dx2 ) / dx3 - - - WaveEntering = (ImposedElevation(ib, jb ) * dx1 + & - ImposedElevation(i_int, j_int) * dx2 ) / dx3 - - WaveEntering = WaveEntering - ReferenceLevel - - !The local solution Gauge_ only have data for water level boundary cell - !Gauge_ local solution does not provide a water level field like the assimilation and submodel local solutions - !This problem need to be solved in the future. - if (Me%ComputeOptions%LocalSolution == Gauge_) then - WaveEntering = ImposedElevation(ib, jb) - ReferenceLevel - endif - - - !The wave Celerity compute in the boundary face - ![m/s] = [m/s^2*m]^.5 = [m/s] - if (Me%WindWaves%CelerityType == LongWaves_) then - - Wave_Celerity = sqrt(Gravity * HT_Boundary) - - elseif (Me%WindWaves%CelerityType == Constant_ ) then - - Wave_Celerity = Me%WindWaves%CelerityConstant - - elseif (Me%WindWaves%CelerityType == AnalyticWaves_) then - - - Wave_Celerity = (WaveCelerityField(ib, jb ) * dx1 + & - WaveCelerityField(i_int, j_int) * dx2 ) / dx3 - - endif - - !If was defined a entering wave then -cd15: if (Me%ComputeOptions%ComputeEnteringWave) then - - call GetCellRotation(Me%ObjHorizontalGrid, ib, jb, CellRotation, STAT = status) - - if (status /= SUCCESS_) then - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV3V2 - Hydrodynamic - ERR95") - endif - - WaveCellDir = EnteringWaveDirection - CellRotation - - !Direction - Entering wave - Cartesian referencial - XY_Component_Cart_E = real(dj) * cos(WaveCellDir) + & - real(di) * sin(WaveCellDir) - YX_Component_Cart_E = real(dj) * sin(WaveCellDir) + & - real(di) * cos(WaveCellDir) - ! - if (abs(XY_Component_Cart_E) < MinLeavingComponent) then - XY_Component_Cart_E = 0. - if (YX_Component_Cart_E > 0) then - YX_Component_Cart_E = 1. - else - YX_Component_Cart_E = -1. - endif - endif - if (abs(YX_Component_Cart_E) < MinLeavingComponent) then - YX_Component_Cart_E = 0. - if (XY_Component_Cart_E > 0) then - XY_Component_Cart_E = 1. - else - XY_Component_Cart_E = -1. - endif - endif -! - - !If the flow of the entering wave is going from the inside the domain to the - !outside then the entering flow is consider be zero - - if ((XY_Component_Cart_E <= 0 .and. db == 0) .or. & !West or South cell boundary - (XY_Component_Cart_E >= 0 .and. db == 1)) then !East or North cell boundary - - XY_Component_Cart_E = 0. - - WaveEntering = 0. - OldWaveEntering = 0. - - endif - - - !Flow - Entering wave - Cartesian referencial. In necessary to compute - !the entering fluxes in cartesian referencial to be consistent witht the - !total fluxes - - ![m^3/s] = [m] * [m/s] * [ ] * [m] - FluxXY_E = WaveEntering * Wave_Celerity * & - XY_Component_Cart_E * DVY_UX(i, j) - - ![m^3/s] = [m] * [m/s] * [ ] * [m] - FluxYX_E = WaveEntering * Wave_Celerity * & - YX_Component_Cart_E * DUX_VY(i, j) - - else cd15 - - XY_Component_Cart_E = 0. - - WaveEntering = 0. - OldWaveEntering = 0. - - FluxXY_E = 0. - FluxYX_E = 0. - - endif cd15 - - !Land boundary = No entering wave - if ((Bathymetry(ib-di,jb-dj) <= -60.) .or. & - (Bathymetry(ib+di,jb+dj) <= -60.) .or. & - (Bathymetry(ib-dj,jb-di) <= -60.) .or. & - (Bathymetry(ib+dj,jb+di) <= -60.)) then - - XY_Component_Cart_E = 0. - - WaveEntering = 0. - OldWaveEntering = 0. - - FluxXY_E = 0. - FluxYX_E = 0. - - endif - - !The leaving wave direction is compute in the center of the - !first interior cell - FluxXY_T = (Flux_WestSouth + Flux_EastNorth) / 2. - - - FluxYX_T = (Flux_SouthWest + Flux_NorthEast) / 2. - - - !Flow - Leaving wave - Cartesian referencial - FluxXY_L = FluxXY_T - FluxXY_E - FluxYX_L = FluxYX_T - FluxYX_E - - !FluxMod_L = pythag (FluxXY_L, FluxYX_L) - FluxMod_L = (FluxXY_L**2.+FluxYX_L**2.)**0.5 - - LeavingVelocity = abs(FluxXY_T) / DYY_XX(i, j) / HT_Boundary - - if (LeavingVelocity < MinLeavingVelocity .and. abs(FluxXY_E) < 1.e-16) then - - !Null gradient - ECoef_2D (ib, jb) = 1 - TiCoef_2D(ib, jb) = 0 - - !west and south boundary - if (db == 0) then - DCoef_2D (ib, jb) = 0. - FCoef_2D (ib, jb) = -1. - !East and North boundary - elseif (db == 1) then - DCoef_2D (ib, jb) = -1. - FCoef_2D (ib, jb) = 0. - else - stop "WaterLevel_FlatherWindWaveV3V2 - Hydrodynamic - ERR110" - endif - - !ends do cycle - cycle - - else - - LeavingVelocity = FluxMod_L / DYY_XX(i, j) / HT_Boundary - - if (LeavingVelocity > MinLeavingVelocity) then - XY_Component_L = abs(FluxXY_L) / FluxMod_L - else - XY_Component_L = 1. - endif - - endif - - !If the flow of the leaving wave is going from inside the domain to the - !outside then the flow must be positive in the oposite condition it must - !be negative - if (db == 0) then !West or South cell boundary - ![ ] = [m^3/s] / [m^3/s] - XY_Component_E = + abs(XY_Component_Cart_E) - - XY_Component_L = - abs(XY_Component_L) - - !The total OLD water flux in the boundary face - WaterFluxBoundary = Flux_WestSouth - - - else if (db == 1) then !East or North cell boundary - - ![ ] = [m^3/s] / [m^3/s] - XY_Component_E = - abs(XY_Component_Cart_E) - - XY_Component_L = + abs(XY_Component_L) - - !The total OLD water flux in the boundary face - WaterFluxBoundary = Flux_EastNorth - - - endif - - - if (abs(XY_Component_L) > 1. ) then - !!!! $OMP CRITICAL (WLFWW1_STOP01) - Stop 'XY_Component_L = 1' - !!!! $OMP END CRITICAL (WLFWW1_STOP01) - endif - - AbsorbCoef = 1. - - !Test absorption boundaries - ! -65 80% - ! -70 60% - ! -75 50% - ! -80 40% - ! -85 10% - !if (db == 1) then - ! if (Bathymetry(ib+di,jb+dj) == -65. ) then - ! AbsorbCoef = 0.8 - ! elseif (Bathymetry(ib+di,jb+dj) == -70. ) then - ! AbsorbCoef = 0.6 - ! elseif (Bathymetry(ib+di,jb+dj) == -75. ) then - ! AbsorbCoef = 0.5 - ! elseif (Bathymetry(ib+di,jb+dj) == -80. ) then - ! AbsorbCoef = 0.4 - ! elseif (Bathymetry(ib+di,jb+dj) == -85. ) then - ! AbsorbCoef = 0.1 - ! elseif (Bathymetry(ib+di,jb+dj) == -89. ) then - ! AbsorbCoef = 0.0 - ! endif - !else - ! if (Bathymetry(ib-di,jb-dj) == -65. ) then - ! AbsorbCoef = 0.8 - ! elseif (Bathymetry(ib-di,jb-dj) == -70. ) then - ! AbsorbCoef = 0.6 - ! elseif (Bathymetry(ib-di,jb-dj) == -75. ) then - ! AbsorbCoef = 0.5 - ! elseif (Bathymetry(ib-di,jb-dj) == -80. ) then - ! AbsorbCoef = 0.4 - ! elseif (Bathymetry(ib-di,jb-dj) == -85. ) then - ! AbsorbCoef = 0.1 - ! elseif (Bathymetry(ib-di,jb-dj) == -89. ) then - ! AbsorbCoef = 0.0 - ! endif - !endif - - if (Bathymetry(ib-1,jb) == -65. .or. Bathymetry(ib+1,jb) == -65. .or. & - Bathymetry(ib,jb-1) == -65. .or. Bathymetry(ib,jb+1) == -65. ) then - AbsorbCoef = 0.8 - elseif (Bathymetry(ib-1,jb) == -70. .or. Bathymetry(ib+1,jb) == -70. .or. & - Bathymetry(ib,jb-1) == -70. .or. Bathymetry(ib,jb+1) == -70. ) then - AbsorbCoef = 0.6 - elseif (Bathymetry(ib-1,jb) == -75. .or. Bathymetry(ib+1,jb) == -75. .or. & - Bathymetry(ib,jb-1) == -75. .or. Bathymetry(ib,jb+1) == -75. ) then - AbsorbCoef = 0.5 - elseif (Bathymetry(ib-1,jb) == -80. .or. Bathymetry(ib+1,jb) == -80. .or. & - Bathymetry(ib,jb-1) == -80. .or. Bathymetry(ib,jb+1) == -80. ) then - AbsorbCoef = 0.4 - elseif (Bathymetry(ib-1,jb) == -85. .or. Bathymetry(ib+1,jb) == -85. .or. & - Bathymetry(ib,jb-1) == -85. .or. Bathymetry(ib,jb+1) == -85. ) then - AbsorbCoef = 0.1 - elseif (Bathymetry(ib-1,jb) == -89. .or. Bathymetry(ib+1,jb) == -89. .or. & - Bathymetry(ib,jb-1) == -89. .or. Bathymetry(ib,jb+1) == -89. ) then - AbsorbCoef = 0.0 - endif - - !Absorption - XY_Component_L = XY_Component_L * AbsorbCoeF - - if (ImplicitFaces) then - - - ![s^-1] = [m^2/s] / [m] / [m] - A_aux = RadCoef_2D (I, J) / DYY_XX(i, j) / HT_Boundary - - ![m/s] = [m^3/s] / [m] / [m] - T3 = TiRadCoef_2D(I, J) / DYY_XX(i, j) / HT_Boundary - - - else - - ![s^-1] = [m^2/s] / [m] / [m] - A_aux = 0. - - ![m/s] = [m^3/s] / [m] / [m] - T3 = WaterFluxBoundary / DYY_XX(i, j) / HT_Boundary - - - endif - - - ![m/s] = [m/s] - [m/s] * [-] - T3 = T3 - ImposedVelocity(ib, jb) * XY_Component_Cart_E - - - ![1/(m*s)] = [m/s] * [ ] / [m] / [m] - B_aux = + Wave_Celerity * XY_Component_L & - / (DUX_VY(i - di, j - dj) + DUX_VY(i, j)) / HT_Boundary - - - ![s^-1] = [ ] * [s^-1] - D1 = - db * A_aux - - ![s^-1] = [ ] * [1/(m*s)] * [m] - D2 = + db * B_aux * DUX_VY(i, j) - - ![s^-1] = [ ] * [s^-1] - E1 = + db * A_Aux - ![s^-1] = [ ] * [1/(m*s)] * [m] - E2 = + db * B_aux * DUX_VY(i - di, j - dj) - - ![s^-1] = [ ] * [s^-1] - E3 = - (1 - db) * A_aux - ![s^-1] = [ ] * [1/(m*s)] * [m] - E4 = + (1 - db) * B_aux * DUX_VY(i, j) - - ![s^-1] = [ ] * [s^-1] - F1 = + (1 - db) * A_aux - ![s^-1] = [ ] * [1/(m*s)] * [m] - F2 = + (1 - db) * B_aux * DUX_VY(i - di, j - dj) - - ! [s^-1] = ([m/s] / [m] ) - T1 = - Wave_Celerity * XY_Component_E / HT_Boundary - - ! [s^-1] = ([m/s] / [m] ) - T2 = + Wave_Celerity * XY_Component_L / HT_Boundary - - ! [m/s] = ([m] * [s^-1] + [m/s] + [m] * [s^-1] - T4 = WaveEntering * T1 + T3 + (WaveEntering + ReferenceLevel) * T2 - - E5 = E1 + E2 + E3 + E4 - -cd7: if (ImplicitFaces) then - - DCoef_2D (ib, jb) = D1 + D2 - - ECoef_2D (ib, jb) = E5 - - FCoef_2D (ib, jb) = F1 + F2 - - TiCoef_2D(ib, jb) = T4 - - else cd7 - - if (abs(E5)>0.) then - WaterLevel_new(ib, jb) = (T4 - (D2 + F2)* WaterLevel_new(i_int, j_int)) / E5 - endif - - endif cd7 - - - - endif cd1 - - enddo - enddo - !$OMP END DO - !$OMP END PARALLEL - - if (MonitorPerformance) call StopWatch ("ModuleHydrodynamic", "WaterLevel_FlatherWindWaveV3") - - -cd21: if (Me%ComputeOptions%LocalSolution == Gauge_) then - - call UnGetOpenBoundary(Me%ObjOpenBoundary, ImposedElevation, STAT = status) - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV3 - Hydrodynamic - ERR120") - - call UnGetOpenBoundary(Me%ObjOpenBoundary, ImposedVelocity, STAT = status) - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV3 - Hydrodynamic - ERR130") - - - - if (Me%Relaxation%RefBoundWaterLevel) then - - call UnGetAssimilation(Me%ObjAssimilation, & - BoundaryReferenceLevel, STAT = status) - - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV3 - Hydrodynamic - ERR140") - - - else - - call UnGetOpenBoundary(Me%ObjOpenBoundary, BoundaryReferenceLevel, STAT = status) - - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV3 - Hydrodynamic - ERR150") - - - endif - - - elseif (Me%ComputeOptions%LocalSolution == AssimilationField_) then cd21 - - - call UnGetAssimilation(Me%ObjAssimilation, & - ImposedElevation, STAT = status) - - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV3 - Hydrodynamic - ERR160") - - endif cd21 - - if (Me%WindWaves%CelerityType == AnalyticWaves_) then - - call UnGetAssimilation(Me%ObjAssimilation, & - WaveCelerityField, STAT = status) - - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV3 - Hydrodynamic - ERR170") - - endif call UnGetGridData(Me%ObjGridData, Bathymetry, STAT = status) if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWaveV3 - Hydrodynamic - ERR180") + call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherWindWave - Hydrodynamic - ERR180") !Nullify auxiliar variables @@ -31076,7 +29483,7 @@ Subroutine WaterLevel_FlatherWindWaveV3 ( WaterFlux_XY, WaterFlux_YX, !---------------------------------------------------------------------- - End Subroutine WaterLevel_FlatherWindWaveV3 + End Subroutine WaterLevel_FlatherWindWave !-------------------------------------------------------------------------- @@ -31099,11 +29506,24 @@ Subroutine WaterLevel_FlatherLocalSolution !Local--------------------------------------------------------------------- - real(8), dimension (:,:,:), pointer :: WaterFlux_XY, WaterFlux_YX, & + type T_Matrix3D + real, dimension(:,:,:), pointer :: LocalVel3D_X , LocalVel3D_Y + end type T_Matrix3D + + type T_Matrix2D + real, dimension(:,:), pointer :: AssimilaWaterLevel + real, dimension(:,:), pointer :: LocalVel2D_X, LocalVel2D_Y + end type T_Matrix2D + + type (T_Matrix3D), dimension(:), pointer :: List3D + type (T_Matrix2D), dimension(:), pointer :: List2D + + real(8), dimension (:,:,:), pointer :: WaterFlux_XY, WaterFlux_YX, & LocalFlux3D_XY, LocalFlux3D_YX - real, dimension (:,:,:), pointer :: LocalVel3D_X , LocalVel3D_Y - real, dimension (:,: ), pointer :: LocalVel2D_XY, LocalVel2D_YX, & - LocalVel2D_X , LocalVel2D_Y + !real, dimension (:,:,:), pointer :: LocalVel3D_X , LocalVel3D_Y + real, dimension (:,: ), pointer :: LocalVel2D_XY, LocalVel2D_YX, & + LocalVel2D_X , LocalVel2D_Y, & + AssimilaWaterLevel real, dimension (:,: ), pointer :: WaterColumnUV, DUX_VY, DYY_XX, DXX_YY integer, dimension (:,:,:), pointer :: ComputeFaces3D_UV, ComputeFaces3D_VU @@ -31116,7 +29536,7 @@ Subroutine WaterLevel_FlatherLocalSolution real(8), dimension(:,:), pointer :: ECoef_2D real, dimension(:,:), pointer :: DCoef_2D, FCoef_2D, TiCoef_2D, & WaterLevel_New, GaugeWaterLevel, & - AssimilaWaterLevel, SubModelWaterLevel, & + SubModelWaterLevel, & RadCoef_2D, TiRadCoef_2D, Bathymetry real, dimension(:,:,:), pointer :: SZZ @@ -31163,6 +29583,8 @@ Subroutine WaterLevel_FlatherLocalSolution real :: dx1, dx2, dx3 + + integer :: iL, NFieldsSSH, NFieldsUV2D, NFieldsUV3D !Begin---------------------------------------------------------------- @@ -31288,111 +29710,145 @@ Subroutine WaterLevel_FlatherLocalSolution ifa: if (Me%ComputeOptions%LocalSolution == AssimilationField_ .or. & Me%ComputeOptions%LocalSolution == AssimilaPlusSubModel_ .or. & Me%ComputeOptions%LocalSolution == AssimilaGaugeSubModel_) then + + call GetNumberOfFields(AssimilationID = Me%ObjAssimilation, & + ID = WaterLevel_, & + NumberOfFields = NFieldsSSH, & + STAT = status) + if (status /= SUCCESS_) & + call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR050") + + allocate(List3D(NFieldsSSH)) + allocate(List2D(NFieldsSSH)) + + nullify (LocalVel2D_X, LocalVel2D_Y, AssimilaWaterLevel) + allocate(LocalVel2D_X (Me%Size%ILB:Me%Size%IUB, Me%Size%JLB:Me%Size%JUB)) + allocate(LocalVel2D_Y (Me%Size%ILB:Me%Size%IUB, Me%Size%JLB:Me%Size%JUB)) + allocate(AssimilaWaterLevel(Me%Size%ILB:Me%Size%IUB, Me%Size%JLB:Me%Size%JUB)) + + LocalVel2D_X (:,:) = 0. + LocalVel2D_Y (:,:) = 0. + AssimilaWaterLevel(:,:) = 0. + +diL: do iL =1, NFieldsSSH - !call GetAssimilationList(WaterLevel = PropertyID) - call GetAssimilationField(Me%ObjAssimilation, & - ID = WaterLevel_, & - Field2D = AssimilaWaterLevel, & - STAT = status) - - if (status /= SUCCESS_) call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR050") - - if (Me%ComputeOptions%ExternalBarotropicVel2D) then - - !call GetAssimilationField(Me%ObjAssimilation, & - ! ID = BarotropicVelocityU_, & - ! Field2D = LocalVel2D_X, & - ! STAT = status) - - !if (status /= SUCCESS_) call SetError (FATAL_, INTERNAL_, & - ! "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR060") - + !call GetAssimilationList(WaterLevel = PropertyID) + call GetAssimilationField(Me%ObjAssimilation, & + ID = WaterLevel_, & + N_Field = iL , & + Field2D = List2D(iL)%AssimilaWaterLevel, & + STAT = status) - !call GetAssimilationField(Me%ObjAssimilation, & - ! ID = BarotropicVelocityV_, & - ! Field2D = LocalVel2D_Y, & - ! STAT = status) + if (status /= SUCCESS_) call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR060") - !if (status /= SUCCESS_) call SetError (FATAL_, INTERNAL_, & - ! "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR070") + do j = JLB, JUB + do i = ILB, IUB + i55: if (Me%External_Var%OpenPoints3D(i, j, KUB) == Covered) then + AssimilaWaterLevel(i, j) = AssimilaWaterLevel(i, j) + List2D(iL)%AssimilaWaterLevel(i, j) + endif i55 + enddo + enddo + + enddo diL + + call GetNumberOfFields(AssimilationID = Me%ObjAssimilation, & + ID = BarotropicVelocityU_, & + NumberOfFields = NFieldsUV2D, & + STAT = status) + if (status /= SUCCESS_) & + call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR070") + + + call GetNumberOfFields(AssimilationID = Me%ObjAssimilation, & + ID = VelocityU_, & + NumberOfFields = NFieldsUV3D, & + STAT = status) + if (status /= SUCCESS_) & + call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR070") + + if (NFieldsUV3D + NFieldsUV2D /= NFieldsSSH) then + call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR080") + endif + + +diL2: do iL =1, NFieldsUV2D !It is important to read vector fields in agreggated way to allow the !rotation of the meridional/zonal velocities to be align with the grid/cell orientation - call GetAssimilationVectorField & - (AssimilationID = Me%ObjAssimilation, & - VectorX_ID = BarotropicVelocityU_, & - VectorY_ID = BarotropicVelocityV_, & - VectorX_2D = LocalVel2D_X, & - VectorY_2D = LocalVel2D_Y, & - STAT = status) - - if (status /= SUCCESS_) call SetError (FATAL_, INTERNAL_, & - "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR070") - - else - - !call GetAssimilationField(Me%ObjAssimilation, & - ! ID = VelocityU_, & - ! Field3D = LocalVel3D_X, & - ! STAT = status) - - !if (status /= SUCCESS_) call SetError (FATAL_, INTERNAL_, & - ! "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR080") - + call GetAssimilationVectorField & + (AssimilationID = Me%ObjAssimilation, & + VectorX_ID = BarotropicVelocityU_, & + VectorY_ID = BarotropicVelocityV_, & + N_Field = iL , & + VectorX_2D = List2D(iL)%LocalVel2D_X, & + VectorY_2D = List2D(iL)%LocalVel2D_Y, & + STAT = status) + + if (status /= SUCCESS_) then + call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR090") + endif + + do j = JLB, JUB + do i = ILB, IUB +i34: if (Me%External_Var%ComputeFaces3D_U(i, j, KUB) == Covered) then + LocalVel2D_X(i, j) = LocalVel2D_X(i, j) + List2D(iL)%LocalVel2D_X(i, j) + endif i34 + enddo + enddo - !call GetAssimilationField(Me%ObjAssimilation, & - ! ID = VelocityV_, & - ! Field3D = LocalVel3D_Y, & - ! STAT = status) + do j = JLB, JUB + do i = ILB, IUB +i35: if (Me%External_Var%ComputeFaces3D_V(i, j, KUB) == Covered) then + LocalVel2D_Y(i, j) = LocalVel2D_Y(i, j) + List2D(iL)%LocalVel2D_Y(i, j) + endif i35 + enddo + enddo + + enddo diL2 - !if (status /= SUCCESS_) call SetError (FATAL_, INTERNAL_, & - ! "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR090") +diL3: do iL =1, NFieldsUV3D !It is important to read vector fields in agreggated way to allow the !rotation of the meridional/zonal velocities to be align with the grid/cell orientation - call GetAssimilationVectorField & - (AssimilationID = Me%ObjAssimilation, & - VectorX_ID = VelocityU_, & - VectorY_ID = VelocityV_, & - VectorX_3D = LocalVel3D_X, & - VectorY_3D = LocalVel3D_Y, & - STAT = status) - - if (status /= SUCCESS_) call SetError (FATAL_, INTERNAL_, & - "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR070") - - nullify (LocalVel2D_X, LocalVel2D_Y) - allocate(LocalVel2D_X(Me%Size%ILB:Me%Size%IUB, Me%Size%JLB:Me%Size%JUB)) - allocate(LocalVel2D_Y(Me%Size%ILB:Me%Size%IUB, Me%Size%JLB:Me%Size%JUB)) + call GetAssimilationVectorField & + (AssimilationID = Me%ObjAssimilation, & + VectorX_ID = VelocityU_, & + VectorY_ID = VelocityV_, & + N_Field = iL , & + VectorX_3D = List3D(iL)%LocalVel3D_X, & + VectorY_3D = List3D(iL)%LocalVel3D_Y, & + STAT = status) + if (status /= SUCCESS_) then + call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR100") + endif - LocalVel2D_X(:,:) = 0. - LocalVel2D_Y(:,:) = 0. do j = JLB, JUB do i = ILB, IUB -i34: if (Me%External_Var%ComputeFaces3D_U(i, j, KUB) == Covered) then +i94: if (Me%External_Var%ComputeFaces3D_U(i, j, KUB) == Covered) then kbottom = Me%External_Var%kfloor_U(i, j) do k = kbottom, KUB - LocalVel2D_X(i, j) = LocalVel2D_X(i, j) + LocalVel3D_X(i, j, k) * & - Me%External_Var%DUZ(i, j, k) / Me%External_Var%WaterColumnU(i, j) + LocalVel2D_X(i, j) = LocalVel2D_X(i, j) + List3D(iL)%LocalVel3D_X(i, j, k) * & + Me%External_Var%DUZ(i, j, k) / Me%External_Var%WaterColumnU(i, j) enddo - endif i34 + endif i94 enddo enddo do j = JLB, JUB do i = ILB, IUB -i35: if (Me%External_Var%ComputeFaces3D_V(i, j, KUB) == Covered) then +i95: if (Me%External_Var%ComputeFaces3D_V(i, j, KUB) == Covered) then kbottom = Me%External_Var%kfloor_V(i, j) do k = kbottom, KUB - LocalVel2D_Y(i, j) = LocalVel2D_Y(i, j) + LocalVel3D_Y(i, j, k) * & - Me%External_Var%DVZ(i, j, k) / Me%External_Var%WaterColumnV(i, j) + LocalVel2D_Y(i, j) = LocalVel2D_Y(i, j) + List3D(iL)%LocalVel3D_Y(i, j, k) * & + Me%External_Var%DVZ(i, j, k) / Me%External_Var%WaterColumnV(i, j) enddo - endif i35 + endif i95 enddo enddo - endif + enddo diL3 + DT_RunPeriod = Me%CurrentTime - Me%BeginTime @@ -31452,13 +29908,14 @@ Subroutine WaterLevel_FlatherLocalSolution WaveDirection = WaveDirection, & STAT = status) - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR90") + if (status /= SUCCESS_) then + call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR110") + endif else write(*,*) 'Define the analytic celerity in assimilation_x.dat for property WaterLevel_' - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR100") + call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR120") endif @@ -31479,7 +29936,8 @@ Subroutine WaterLevel_FlatherLocalSolution !$OMP PRIVATE(Wave_Celerity,FluxXY_E,FluxYX_E,LocalWLa,LocalWLb,LocalWave) & !$OMP PRIVATE(FluxXY_T,FluxYX_T,FluxXY_L,FluxYX_L,FluxMod_L,LeavingVelocity) & !$OMP PRIVATE(XY_Component_L,WaterFluxBoundary,LocalBoundaryFlux,A_aux,T3) & - !$OMP PRIVATE(B_aux,D1,D2,E1,E2,E3,E4,F1,F2,T1,T4) + !$OMP PRIVATE(B_aux,D1,D2,E1,E2,E3,E4,F1,F2,T1,T4) & + !$OMP PRIVATE(dx1,dx2,dx3) !$OMP DO SCHEDULE(DYNAMIC,CHUNK) do j = JLB, JUB @@ -31897,7 +30355,7 @@ Subroutine WaterLevel_FlatherLocalSolution call UnGetGridData(Me%ObjGridData, Bathymetry, STAT = status) if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR100") + call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR130") @@ -31907,7 +30365,7 @@ Subroutine WaterLevel_FlatherLocalSolution call UnGetOpenBoundary(Me%ObjOpenBoundary, GaugeWaterLevel, STAT = status) if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR110") + call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR140") endif cd24 @@ -31918,58 +30376,65 @@ Subroutine WaterLevel_FlatherLocalSolution Me%ComputeOptions%LocalSolution == AssimilaPlusSubModel_ .or. & Me%ComputeOptions%LocalSolution == AssimilaGaugeSubmodel_) then +diL4: do iL =1, NFieldsSSH - call UnGetAssimilation(Me%ObjAssimilation, & - AssimilaWaterLevel, STAT = status) - - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR120") + call UnGetAssimilation(Me%ObjAssimilation, & + List2D(iL)%AssimilaWaterLevel, STAT = status) - if (Me%ComputeOptions%ExternalBarotropicVel2D) then + if (status /= SUCCESS_) & + call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR150") + + enddo diL4 + +diL5: do iL =1, NFieldsUV2D call UnGetAssimilation(Me%ObjAssimilation, & - LocalVel2D_X, STAT = status) - + List2D(iL)%LocalVel2D_X, STAT = status) if (status /= SUCCESS_) & call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR130") call UnGetAssimilation(Me%ObjAssimilation, & - LocalVel2D_Y, STAT = status) - + List2D(iL)%LocalVel2D_Y, STAT = status) if (status /= SUCCESS_) & call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR140") - else - - - if (associated(LocalVel2D_X )) deallocate(LocalVel2D_X) - if (associated(LocalVel2D_Y )) deallocate(LocalVel2D_Y) - + + enddo diL5 + +diL6: do iL =1, NFieldsUV3D + call UnGetAssimilation(Me%ObjAssimilation, & - LocalVel3D_X, STAT = status) + List3D(iL)%LocalVel3D_X, STAT = status) if (status /= SUCCESS_) & call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR150") call UnGetAssimilation(Me%ObjAssimilation, & - LocalVel3D_Y, STAT = status) + List3D(iL)%LocalVel3D_Y, STAT = status) if (status /= SUCCESS_) & call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR160") - - endif + enddo DiL6 + + if (associated(LocalVel2D_X )) deallocate(LocalVel2D_X ) + if (associated(LocalVel2D_Y )) deallocate(LocalVel2D_Y ) + if (associated(AssimilaWaterLevel)) deallocate(AssimilaWaterLevel) + + deallocate(List2D) + deallocate(List3D) + endif cd25 if (Me%WindWaves%CelerityType == AnalyticWaves_) then - call UnGetAssimilation(Me%ObjAssimilation, & + call UnGetAssimilation(Me%ObjAssimilation, & WaveCelerityField, STAT = status) - if (status /= SUCCESS_) & + if (status /= SUCCESS_) & call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR170") endif @@ -39983,9 +38448,21 @@ Subroutine ModifyRelaxAceleration !Local--------------------------------------------------------------------- + type T_Matrix3D + real, dimension(:,:,:), pointer :: VelAssimilation3D + end type T_Matrix3D + + type T_Matrix2D + real, dimension(:,: ), pointer :: VelAssimilation2D + end type T_Matrix2D + + + type (T_Matrix3D), dimension(:), pointer :: List3D + type (T_Matrix2D), dimension(:), pointer :: List2D + real, dimension(:,:,:), pointer :: Velocity_UV_New, SubModel_UV_New, & Relax_Aceleration, DecayTime, & - VelAssimilation, DUZ_VZ + DUZ_VZ real, dimension(:,: ), pointer :: WaterColumnUV @@ -40001,6 +38478,7 @@ Subroutine ModifyRelaxAceleration integer :: ILB, IUB, JLB, JUB, KUB, kbottom, i, j, k integer :: CHUNK + integer :: iL, NFieldsUV2D, NFieldsUV3D !------------initialization---- @@ -40042,6 +38520,26 @@ Subroutine ModifyRelaxAceleration CurrentTime = Me%CurrentTime !End - Shorten variables name + + call GetNumberOfFields(AssimilationID = Me%ObjAssimilation, & + ID = BarotropicVelocityU_, & + NumberOfFields = NFieldsUV2D, & + STAT = status) + if (status /= SUCCESS_) & + call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR070") + + + call GetNumberOfFields(AssimilationID = Me%ObjAssimilation, & + ID = VelocityU_, & + NumberOfFields = NFieldsUV3D, & + STAT = status) + if (status /= SUCCESS_) & + call SetError (FATAL_, INTERNAL_, "WaterLevel_FlatherLocalSolution - Hydrodynamic - ERR070") + + + allocate(List2D(NFieldsUV2D)) + allocate(List3D(NFieldsUV3D)) + nullify (SubModel_UV_New) @@ -40055,15 +38553,33 @@ Subroutine ModifyRelaxAceleration !It is important to read vector fields in agreggated way to allow the !rotation of the meridional/zonal velocities to be align with the grid/cell orientation - call GetAssimilationVectorField & - (AssimilationID = Me%ObjAssimilation, & - VectorX_ID = VelocityU_, & - VectorY_ID = VelocityV_, & - VectorX_3D = VelAssimilation, & - STAT = status) - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "ModifyRelaxAceleration - Hydrodynamic - ERR10") + + do iL =1, NFieldsUV3D + + call GetAssimilationVectorField & + (AssimilationID = Me%ObjAssimilation, & + VectorX_ID = VelocityU_, & + VectorY_ID = VelocityV_, & + N_Field = iL , & + VectorX_3D = List3D(iL)%VelAssimilation3D, & + STAT = status) + if (status /= SUCCESS_) & + call SetError (FATAL_, INTERNAL_, "ModifyRelaxAceleration - Hydrodynamic - ERR10") + enddo + + do iL =1, NFieldsUV2D + call GetAssimilationVectorField & + (AssimilationID = Me%ObjAssimilation, & + VectorX_ID = BarotropicVelocityU_, & + VectorY_ID = BarotropicVelocityV_, & + N_Field = iL , & + VectorX_2D = List2D(iL)%VelAssimilation2D, & + STAT = status) + if (status /= SUCCESS_) & + call SetError (FATAL_, INTERNAL_, "ModifyRelaxAceleration - Hydrodynamic - ERR10") + enddo + else if (Me%Direction%XY == DirectionY_) then cd2 @@ -40071,38 +38587,45 @@ Subroutine ModifyRelaxAceleration if (Me%SubModel%ON) & SubModel_UV_New => Me%SubModel%V_New - !It is important to read vector fields in agreggated way to allow the - !rotation of the meridional/zonal velocities to be align with the grid/cell orientation - call GetAssimilationVectorField & - (AssimilationID = Me%ObjAssimilation, & - VectorX_ID = VelocityU_, & - VectorY_ID = VelocityV_, & - VectorY_3D = VelAssimilation, & - STAT = status) - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "ModifyRelaxAceleration - Hydrodynamic - ERR15") - - - endif cd2 + do iL =1, NFieldsUV3D + !It is important to read vector fields in agreggated way to allow the + !rotation of the meridional/zonal velocities to be align with the grid/cell orientation + call GetAssimilationVectorField & + (AssimilationID = Me%ObjAssimilation, & + VectorX_ID = VelocityU_, & + VectorY_ID = VelocityV_, & + N_Field = iL , & + VectorY_3D = List3D(iL)%VelAssimilation3D, & + STAT = status) + if (status /= SUCCESS_) & + call SetError (FATAL_, INTERNAL_, "ModifyRelaxAceleration - Hydrodynamic - ERR15") - !call GetAssimilationField(Me%ObjAssimilation, & - ! ID = Vel_ID, & - ! Field3D = VelAssimilation, & - ! STAT = status) + enddo + + do iL =1, NFieldsUV2D - !if (status /= SUCCESS_) & - ! call SetError (FATAL_, INTERNAL_, "ModifyRelaxAceleration - Hydrodynamic - ERR10") + call GetAssimilationVectorField & + (AssimilationID = Me%ObjAssimilation, & + VectorX_ID = BarotropicVelocityU_, & + VectorY_ID = BarotropicVelocityV_, & + N_Field = iL , & + VectorY_2D = List2D(iL)%VelAssimilation2D, & + STAT = status) + if (status /= SUCCESS_) & + call SetError (FATAL_, INTERNAL_, "ModifyRelaxAceleration - Hydrodynamic - ERR10") + enddo + endif cd2 - call GetAssimilationCoef (Me%ObjAssimilation, & - ID = Vel_ID, & - CoefField3D = DecayTime, & - ColdRelaxPeriod = ColdPeriod, & - ColdOrder = ColdOrder, & - STAT = status) + call GetAssimilationCoef (Me%ObjAssimilation, & + ID = Vel_ID, & + CoefField3D = DecayTime, & + ColdRelaxPeriod = ColdPeriod, & + ColdOrder = ColdOrder, & + STAT = status) - if (status /= SUCCESS_) & + if (status /= SUCCESS_) & call SetError (FATAL_, INTERNAL_, "ModifyRelaxAceleration - Hydrodynamic - ERR20") @@ -40142,7 +38665,7 @@ Subroutine ModifyRelaxAceleration do4: do K=kbottom, KUB - VelModel = VelModel + Velocity_UV_New(i, j, k) * & + VelModel = VelModel + Velocity_UV_New(i, j, k) * & DUZ_VZ(i, j, k) / WaterColumnUV(i, j) enddo do4 @@ -40151,13 +38674,21 @@ Subroutine ModifyRelaxAceleration do3: do K=kbottom, KUB - if (Me%Relaxation%ReferenceVelocity /= BarotrVel_) & + if (Me%Relaxation%ReferenceVelocity /= BarotrVel_) & VelModel = Velocity_UV_New(i, j, k) if (Me%ComputeOptions%LocalSolution == AssimilaPlusSubModel_ .or. & Me%ComputeOptions%LocalSolution == AssimilaGaugeSubmodel_) then - - VelReference = VelAssimilation(i, j, k) + SubModel_UV_New(i, j, k) + + VelReference = SubModel_UV_New(i, j, k) + + do iL =1, NFieldsUV3D + VelReference = VelReference + List3D(iL)%VelAssimilation3D(i, j, k) + enddo + + do iL =1, NFieldsUV2D + VelReference = VelReference + List2D(iL)%VelAssimilation2D(i, j) + enddo elseif (Me%ComputeOptions%LocalSolution == Submodel_) then @@ -40170,7 +38701,15 @@ Subroutine ModifyRelaxAceleration elseif (Me%ComputeOptions%LocalSolution == NoLocalSolution_ .or. & Me%ComputeOptions%LocalSolution == AssimilationField_) then - VelReference = VelAssimilation(i, j, k) + VelReference = 0. + do iL =1, NFieldsUV3D + VelReference = VelReference + List3D(iL)%VelAssimilation3D(i, j, k) + enddo + + do iL =1, NFieldsUV2D + VelReference = VelReference + List2D(iL)%VelAssimilation2D(i, j) + enddo + elseif (Me%ComputeOptions%LocalSolution == Gauge_) then @@ -40179,7 +38718,16 @@ Subroutine ModifyRelaxAceleration endif if (Me%Relaxation%BrFroceOnlyAssimil) then - VelReference = VelAssimilation(i, j, k) + + VelReference = 0. + do iL =1, NFieldsUV3D + VelReference = VelReference + List3D(iL)%VelAssimilation3D(i, j, k) + enddo + + do iL =1, NFieldsUV2D + VelReference = VelReference + List2D(iL)%VelAssimilation2D(i, j) + enddo + endif ![m/s^2] = []*([m/s] - [m/s]) / [s] @@ -40201,14 +38749,25 @@ Subroutine ModifyRelaxAceleration call UnGetAssimilation(Me%ObjAssimilation, DecayTime, STAT = status) - if (status /= SUCCESS_) & + if (status /= SUCCESS_) & call SetError (FATAL_, INTERNAL_, "ModifyRelaxAceleration - Hydrodynamic - ERR50") - call UnGetAssimilation(Me%ObjAssimilation, VelAssimilation, & - STAT = status) + do iL =1, NFieldsUV3D + call UnGetAssimilation(Me%ObjAssimilation, List3D(iL)%VelAssimilation3D, & + STAT = status) + if (status /= SUCCESS_) & + call SetError (FATAL_, INTERNAL_, "ModifyRelaxAceleration - Hydrodynamic - ERR60") + enddo - if (status /= SUCCESS_) & - call SetError (FATAL_, INTERNAL_, "ModifyRelaxAceleration - Hydrodynamic - ERR60") + do iL =1, NFieldsUV2D + call UnGetAssimilation(Me%ObjAssimilation, List2D(iL)%VelAssimilation2D, & + STAT = status) + if (status /= SUCCESS_) & + call SetError (FATAL_, INTERNAL_, "ModifyRelaxAceleration - Hydrodynamic - ERR60") + enddo + + deallocate(List3D) + deallocate(List2D) nullify(Relax_Aceleration) nullify(ComputeFaces3D_UV) @@ -41884,7 +40443,7 @@ Subroutine Compute_WaveVortexForce2 if (ComputeFaces3D_UV(i, j, KUB) == Covered) then - Kbottom = KFloor_UV(i, j) + kbottom = KFloor_UV(i, j) do k = Kbottom, KUB diff --git a/Software/MOHIDWater/ModuleInterfaceSedimentWater.F90 b/Software/MOHIDWater/ModuleInterfaceSedimentWater.F90 index 813143815..763ce07ae 100644 --- a/Software/MOHIDWater/ModuleInterfaceSedimentWater.F90 +++ b/Software/MOHIDWater/ModuleInterfaceSedimentWater.F90 @@ -2657,7 +2657,7 @@ subroutine Open_HDF5_OutPut_File call GetHDF5FileAccess (HDF5_CREATE = HDF5_CREATE) !Opens HDF5 File - call ConstructHDF5(Me%ObjHDF5, trim(Me%Files%Results)//"5", HDF5_CREATE, STAT = STAT_CALL) + call ConstructHDF5(Me%ObjHDF5, trim(Me%Files%Results), HDF5_CREATE, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) & stop 'Open_HDF5_OutPut_File - ModuleInterfaceSedimentWater - ERR01' @@ -4093,12 +4093,12 @@ subroutine Read_Old_Properties_2D(Scalar_2D, PropertyName) ObjHDF5 = 0 - inquire(File = trim(Me%Files%Initial)//"5", Exist = exist) + inquire(File = trim(Me%Files%Initial), Exist = exist) if(.not. exist)then write(*,*) write(*,*) 'Could not find the final InterfaceSedimentWater file.' - write(*,'(A)') 'BoxFileName = ', trim(Me%Files%Initial)//"5" + write(*,'(A)') 'BoxFileName = ', trim(Me%Files%Initial) stop 'Read_Old_Properties_2D - ModuleInterfaceSedimentWater - ERR10' end if @@ -4106,7 +4106,7 @@ subroutine Read_Old_Properties_2D(Scalar_2D, PropertyName) call GetHDF5FileAccess (HDF5_READ = HDF5_READ) !Opens HDF5 File - call ConstructHDF5 (ObjHDF5, trim(Me%Files%Initial)//"5", HDF5_READ, STAT = STAT_CALL) + call ConstructHDF5 (ObjHDF5, trim(Me%Files%Initial), HDF5_READ, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'read_Old_Properties_2D - ModuleInterfaceSedimentWater - ERR20' call GetDDecompParameters(HorizontalGridID = Me%ObjHorizontalGrid, & @@ -10316,7 +10316,7 @@ subroutine Write_Final_HDF( Final ) ObjHDF5 = 0 !Opens HDF5 File - call ConstructHDF5 (ObjHDF5,trim(filename)//"5", HDF5_CREATE, STAT = STAT_CALL) + call ConstructHDF5 (ObjHDF5,trim(filename), HDF5_CREATE, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_)stop 'Write_Final_HDF - ModuleInterfaceSedimentWater - ERR01' !Write the Horizontal Grid diff --git a/Software/MOHIDWater/ModuleJet.F90 b/Software/MOHIDWater/ModuleJet.F90 index 5e7959e5c..41855964a 100644 --- a/Software/MOHIDWater/ModuleJet.F90 +++ b/Software/MOHIDWater/ModuleJet.F90 @@ -98,9 +98,9 @@ Module ModuleJet ! SURFACE_VELV : real (m/s) [0] !ambient surface velocity V when a LINEAR water column is admitted use ModuleGlobalData - use ModuleEnterData, only : ConstructEnterData, GetData, KillEnterData, GetExtractType - use ModuleFunctions, only : SigmaUNESCO - + use ModuleEnterData, only : ConstructEnterData, GetData, KillEnterData, GetExtractType + use ModuleFunctions, only : SigmaUNESCO + use ModuleHorizontalGrid, only : GetCellRotation implicit none @@ -371,6 +371,7 @@ Module ModuleJet type(T_OutPut) :: OutPut type(T_Evolution) :: Evolution integer :: ObjEnterData = 0 + integer :: ObjHorizontalGrid = 0 !Collection of instances type(T_Jet ), pointer :: Next @@ -394,12 +395,13 @@ Module ModuleJet !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - subroutine Construct_Jet(JetID, FileName, PositionX, PositionY, & + subroutine Construct_Jet(JetID, FileName, HorizontalGridID, PositionX, PositionY, & Flow, Salinity, Temperature, STAT) !Arguments------------------------------------------------------------- integer :: JetID character(LEN=*) :: FileName + integer :: HorizontalGridID real :: PositionX, PositionY real :: Flow, Salinity, Temperature integer, optional, intent(OUT) :: STAT @@ -426,6 +428,8 @@ subroutine Construct_Jet(JetID, FileName, PositionX, PositionY, & !Allocates a new Instance call AllocateInstance + + Me%ObjHorizontalGrid = AssociateInstance (mHORIZONTALGRID_, HorizontalGridID) call ConstructEnterData (Me%ObjEnterData, FileName, STAT = STAT_) if (STAT_ /= SUCCESS_) stop 'Construct_Jet - ModuleJet - ERR01' @@ -1340,8 +1344,9 @@ subroutine LocalAmbientProp !Local----------------------------------------------------------------- integer :: I, J, K, Kbottom, Ksurface - real :: a + real :: a, CellRotationX, CellRotationY logical :: FoundLayer + integer :: STAT_CALL !---------------------------------------------------------------------- @@ -1375,15 +1380,25 @@ subroutine LocalAmbientProp Me%Ambient%LocalSalinity = Me%Ambient%Salinity(I, J, K) Me%Ambient%LocalTemperature = Me%Ambient%Temperature(I, J, K) - - - Me%Ambient%LocalVelU = Me%Ambient%VelU(I, J, K) - Me%Ambient%LocalVelV = Me%Ambient%VelV(I, J, K) - Me%Ambient%LocalVelW = Me%Ambient%VelW(I, J, K) + + call GetCellRotation(Me%ObjHorizontalGrid, I, J, & + CellRotationX = CellRotationX, & + CellRotationY = CellRotationY, & + STAT = STAT_CALL) + + if (STAT_CALL /= SUCCESS_) then + stop 'ModuleJet - LocalAmbientProp - ERR20' + endif + + Me%Ambient%LocalVelU = Me%Ambient%VelU(I, J, K) * cos(CellRotationX) + & + Me%Ambient%VelV(I, J, K) * cos(CellRotationY) + Me%Ambient%LocalVelV = Me%Ambient%VelU(I, J, K) * sin(CellRotationX) + & + Me%Ambient%VelV(I, J, K) * sin(CellRotationY) + Me%Ambient%LocalVelW = Me%Ambient%VelW(I, J, K) else - stop 'LocalAmbientProp - ModuleJet - ERR01' + stop 'LocalAmbientProp - ModuleJet - ERR30' endif else if (Me%Ambient%LocalType == Uniform) then @@ -2855,8 +2870,9 @@ subroutine KillJet(JetID, STAT) nUsers = DeassociateInstance(mJET_, Me%InstanceID) if (nUsers == 0) then - - + + nUsers = DeassociateInstance(mHORIZONTALGRID_, Me%ObjHorizontalGrid) + if (nUsers == 0) stop 'KillJet - ModuleJet -ERR10' !Deallocates the output matrix deallocate (Me%OutPut%Matrix) diff --git a/Software/MOHIDWater/ModuleLagrangian.F90 b/Software/MOHIDWater/ModuleLagrangian.F90 index 53cac8122..75e3473a1 100644 --- a/Software/MOHIDWater/ModuleLagrangian.F90 +++ b/Software/MOHIDWater/ModuleLagrangian.F90 @@ -3786,15 +3786,15 @@ subroutine ConstructOrigins if (NewOrigin%State%ComputePlume) then - call Construct_Jet(JetID = NewOrigin%Movement%ObjJet, & - FileName = NewOrigin%Movement%JetDataFile, & - PositionX = NewOrigin%Position%X, & - PositionY = NewOrigin%Position%Y, & - Flow = NewOrigin%Flow, & - Salinity = NewOrigin%Movement%JetSalinity, & - Temperature = NewOrigin%Movement%JetTemperature, & - STAT = STAT_CALL) - + call Construct_Jet(JetID = NewOrigin%Movement%ObjJet, & + FileName = NewOrigin%Movement%JetDataFile, & + HorizontalGridID = Me%ObjHorizontalGrid, & + PositionX = NewOrigin%Position%X, & + PositionY = NewOrigin%Position%Y, & + Flow = NewOrigin%Flow, & + Salinity = NewOrigin%Movement%JetSalinity, & + Temperature = NewOrigin%Movement%JetTemperature, & + STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ConstructOrigins - ModuleLagrangian - ERR1530' call UnitsManager(NewOrigin%Movement%JetUnit, OPEN_FILE, & diff --git a/Software/MOHIDWater/ModuleLagrangianGlobal.F90 b/Software/MOHIDWater/ModuleLagrangianGlobal.F90 index 76a5e98c8..de3ac6854 100644 --- a/Software/MOHIDWater/ModuleLagrangianGlobal.F90 +++ b/Software/MOHIDWater/ModuleLagrangianGlobal.F90 @@ -940,6 +940,7 @@ Module ModuleLagrangianGlobal type T_EulerModel character(len=StringLength) :: Name = null_str + character(len=PathLength ) :: Path = null_str !ObjBathymetry real, dimension(:, : ), pointer :: Bathymetry => null() @@ -1632,7 +1633,7 @@ Module ModuleLagrangianGlobal type T_MeteoOcean integer :: PropNumber = null_int - type(T_MetOceanProp), dimension(:), pointer :: Prop => null() + type(T_MetOceanProp), dimension(:), pointer :: Prop => null() end type T_MeteoOcean !ExternalVar @@ -1743,7 +1744,6 @@ Module ModuleLagrangianGlobal !#endif logical :: WritesTimeSerie = .false. - logical :: RunOnlyMov2D = .false. logical :: Overlay = .false. logical :: FirstIteration = .true. logical :: ConstructLag = .true. @@ -1835,6 +1835,7 @@ end subroutine AllocateLagrangianGlobal subroutine ConstructLagrangianGlobal(LagrangianID, & Nmodels, & ModelNames, & + ModelPaths, & FileNomfich, & LagInstance, & STAT) @@ -1844,6 +1845,7 @@ subroutine ConstructLagrangianGlobal(LagrangianID, integer :: LagrangianID integer :: Nmodels character(len=*), dimension(:), pointer :: ModelNames + character(len=*), dimension(:), pointer :: ModelPaths character(len=*) :: FileNomfich integer, dimension(:,:), pointer :: LagInstance integer, optional, intent(OUT) :: STAT @@ -1909,6 +1911,7 @@ subroutine ConstructLagrangianGlobal(LagrangianID, em1: do em =1, Me%EulerModelNumber Me%EulerModel(em)%Name = ModelNames(IndexMatch(em)) + Me%EulerModel(em)%Path = ModelPaths(IndexMatch(em)) !External Modules Me%EulerModel(em)%ObjTime = AssociateInstance (mTIME_, TimeID (IndexMatch(em))) @@ -5906,7 +5909,7 @@ subroutine ConstructOneOrigin(NewOrigin, ClientNumber) flag, & SearchType = FromBlock, & keyword ='PLUME_SHEAR', & - Default = .true., & + Default = .false., & ClientModule ='ModuleLagrangianGlobal', & STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ConstructOneOrigin - ModuleLagrangianGlobal - ERR550' @@ -6854,14 +6857,15 @@ subroutine ConstructOneOrigin(NewOrigin, ClientNumber) if (NewOrigin%State%ComputePlume .and. .not. NewOrigin%Default) then - call Construct_Jet(JetID = NewOrigin%Movement%ObjJet, & - FileName = NewOrigin%Movement%JetDataFile, & - PositionX = NewOrigin%Position%CartX, & - PositionY = NewOrigin%Position%CartY, & - Flow = NewOrigin%Flow, & - Salinity = NewOrigin%Movement%JetSalinity, & - Temperature = NewOrigin%Movement%JetTemperature, & - STAT = STAT_CALL) + call Construct_Jet(JetID = NewOrigin%Movement%ObjJet, & + FileName = NewOrigin%Movement%JetDataFile, & + HorizontalGridID = Me%EulerModel(em)%ObjHorizontalGrid, & + PositionX = NewOrigin%Position%CartX, & + PositionY = NewOrigin%Position%CartY, & + Flow = NewOrigin%Flow, & + Salinity = NewOrigin%Movement%JetSalinity, & + Temperature = NewOrigin%Movement%JetTemperature, & + STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ConstructOneOrigin - ModuleLagrangianGlobal - ERR1600' @@ -6886,8 +6890,12 @@ subroutine ConstructOneOrigin(NewOrigin, ClientNumber) trim(NewOrigin%Movement%JetFileOut) stop 'ConstructOneOrigin - ModuleLagrangianGlobal - ERR1620' endif + + call WriteDataLine(NewOrigin%Movement%JetUnit, 'SERIE_INITIAL_DATA', Me%ExternalVar%BeginTime) + + write(NewOrigin%Movement%JetUnit,*) 'TIME_UNITS : SECONDS' - write(NewOrigin%Movement%JetUnit,'(A110)')"Year Month Day Hour Minutes " & + write(NewOrigin%Movement%JetUnit,'(A110)')"Time Year Month Day Hour Minutes " & // "Seconds Dilution X Y Z Density Temperature " & // "Salinity U V W MixingHorLength Thickness" write(NewOrigin%Movement%JetUnit,*) '' @@ -8571,8 +8579,11 @@ subroutine ConstructTimeSeries integer :: STAT_CALL integer :: iflag, em, dn, Id, Jd, TimeSerieNumber character(len=PathLength) :: TimeSerieLocationFile + character(len=PathLength) :: NomfichFile, RootPath logical :: CoordON, IgnoreOK - + type (T_Polygon), pointer :: ModelDomainLimit + + !Begin----------------------------------------------------------------- !This test is done for simply reason if (Me%nGroups > 1) then @@ -8594,13 +8605,14 @@ subroutine ConstructTimeSeries !Allocates Property List if (iProp > 0) then - allocate(PropertyList(iProp)) + allocate(PropertyList(iProp+3)) else Me%WritesTimeSerie = .false. write(*,*)'No Properties defined' write(*,*)'Particle Time Series Disabled' return endif + !Fills Property List @@ -8617,12 +8629,23 @@ subroutine ConstructTimeSeries endif CurrentProperty => CurrentProperty%Next enddo - + + PropertyList(iProp+1) = trim(GetPropertyName (VelocityU_ )) + PropertyList(iProp+2) = trim(GetPropertyName (VelocityV_ )) + PropertyList(iProp+3) = trim(GetPropertyName (VelocityW_ )) + d1: do em = 1, Me%EulerModelNumber !Gets the position of the water points in the Map Module call GetWaterPoints3D(Me%EulerModel(em)%ObjMap, WaterPoints3D, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ConstructTimeSerie - ModuleLagrangianGlobal - ERR20' + + call GetGridOutBorderPolygon(HorizontalGridID = Me%EulerModel(em)%ObjHorizontalGrid,& + Polygon = ModelDomainLimit, & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) then + stop 'ConstructTimeSerie - ModuleLagrangianGlobal - ERR25' + endif call GetData(TimeSerieLocationFile, & Me%ObjEnterData ,iflag, & @@ -8633,6 +8656,16 @@ subroutine ConstructTimeSeries STAT = STAT_CALL) if (STAT_CALL .NE. SUCCESS_) & stop 'ConstructTimeSerie - ModuleLagrangianGlobal - ERR30' + + NomfichFile = trim(Me%EulerModel(em)%Path)//'/nomfich.dat' + + call ReadFileName(keyword = "ROOT_SRT", & + FILE_NAME = RootPath, & + FilesInput = NomfichFile, & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) then + stop 'ConstructTimeSerie - ModuleLagrangianGlobal - ERR35' + endif !Constructs TimeSerie call StartTimeSerie(Me%EulerModel(em)%ObjTimeSerie, Me%EulerModel(em)%ObjTime,& @@ -8640,18 +8673,32 @@ subroutine ConstructTimeSeries PropertyList, "srl", & WaterPoints3D = WaterPoints3D, & ModelName = Me%EulerModel(em)%Name, & + ModelDomain = ModelDomainLimit, & + ReplacePath = RootPath, & STAT = STAT_CALL) if (STAT_CALL /= 0) stop 'ConstructTimeSerie - ModuleLagrangianGlobal - ERR40' !Ungets the WaterPoints call UnGetMap (Me%EulerModel(em)%ObjMap, WaterPoints3D, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ConstructTimeSerie - ModuleLagrangianGlobal - ERR50' + + call UngetHorizontalGrid(HorizontalGridID = Me%EulerModel(em)%ObjHorizontalGrid,& + Polygon = ModelDomainLimit, & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) then + stop 'ConstructTimeSerie - ModuleLagrangianGlobal - ERR55' + endif !Corrects if necessary the cell of the time serie based in the time serie coordinates call GetNumberOfTimeSeries(Me%EulerModel(em)%ObjTimeSerie, TimeSerieNumber, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ConstructTimeSerie - ModuleLagrangianGlobal - ERR60' do dn = 1, TimeSerieNumber + + call TryIgnoreTimeSerie(Me%EulerModel(em)%ObjTimeSerie, dn, IgnoreOK, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ConstructTimeSerie - ModuleLagrangianGlobal - ERR90' + + if (IgnoreOK) cycle call GetTimeSerieLocation(Me%EulerModel(em)%ObjTimeSerie, dn, & CoordX = CoordX, & @@ -8667,19 +8714,19 @@ subroutine ConstructTimeSeries if (STAT_CALL /= SUCCESS_ .and. STAT_CALL /= OUT_OF_BOUNDS_ERR_) then stop 'ConstructTimeSerie - ModuleLagrangianGlobal - ERR80' endif - - if (STAT_CALL == OUT_OF_BOUNDS_ERR_ .or. Id < 0 .or. Jd < 0) then - - call TryIgnoreTimeSerie(Me%EulerModel(em)%ObjTimeSerie, dn, IgnoreOK, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ConstructTimeSerie - ModuleLagrangianGlobal - ERR90' - - if (IgnoreOK) then - cycle - else - stop 'ConstructTimeSerie - ModuleLagrangianGlobal - ERR100' - endif - - endif + ! + !if (STAT_CALL == OUT_OF_BOUNDS_ERR_ .or. Id < 0 .or. Jd < 0) then + ! + ! call TryIgnoreTimeSerie(Me%EulerModel(em)%ObjTimeSerie, dn, IgnoreOK, STAT = STAT_CALL) + ! if (STAT_CALL /= SUCCESS_) stop 'ConstructTimeSerie - ModuleLagrangianGlobal - ERR90' + ! + ! if (IgnoreOK) then + ! cycle + ! else + ! stop 'ConstructTimeSerie - ModuleLagrangianGlobal - ERR100' + ! endif + ! + !endif call CorrectsCellsTimeSerie(Me%EulerModel(em)%ObjTimeSerie, dn, Id, Jd, STAT = STAT_CALL) @@ -9790,6 +9837,7 @@ subroutine ActualizeJetProperties(CurrentOrigin) real :: Year, Month, Day, Hour, Minutes, Seconds integer :: STAT_CALL, I, J, OutPutNumber, em logical :: OutPutJet + real :: SecondsFromStart !Begin----------------------------------------------------------------- I = CurrentOrigin%Position%I @@ -9897,9 +9945,14 @@ subroutine ActualizeJetProperties(CurrentOrigin) call GetPlumeThickness(CurrentOrigin%Movement%ObjJet, PlumeThickness, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ActualizeJetProperties - ModuleLagrangianGlobal - ERR14' + + SecondsFromStart = Me%Now - Me%ExternalVar%BeginTime + + - write(CurrentOrigin%Movement%JetUnit,'(7F8.0, 2F14.3, F12.3, F16.6, 2F8.4,3F12.5, F10.2, F8.3)') & + write(CurrentOrigin%Movement%JetUnit,'(F16.0, 7F8.0, 2F14.3, F12.3, F16.6, 2F8.4,3F12.5, F10.2, F8.3)') & + SecondsFromStart, & Year, Month, Day, Hour, Minutes, Seconds, PlumeDilution, & PlumeX, PlumeY, PlumeZ, PlumeDensity, PlumeTemperature, & PlumeSalinity, PlumeU, PlumeV, PlumeW, & @@ -25564,6 +25617,11 @@ subroutine OutPut_TimeSeries if (STAT_CALL /= SUCCESS_) stop 'OutPut_TimeSeries - ModuleLagrangianGlobal - ERR10' do dn = 1, TimeSerieNumber + + call TryIgnoreTimeSerie(Me%EulerModel(em)%ObjTimeSerie, dn, IgnoreOK, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'OutPut_TimeSeries - ModuleLagrangianGlobal - ERR30' + + if (IgnoreOK) cycle call GetTimeSerieLocation(Me%EulerModel(em)%ObjTimeSerie, dn, & LocalizationI = id, & @@ -25575,18 +25633,18 @@ subroutine OutPut_TimeSeries if (DepthON) then - if (Id < 0 .or. Jd < 0) then - - call TryIgnoreTimeSerie(Me%EulerModel(em)%ObjTimeSerie, dn, IgnoreOK, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'OutPut_TimeSeries - ModuleLagrangianGlobal - ERR30' - - if (IgnoreOK) then - cycle - else - stop 'OutPut_TimeSeries - ModuleLagrangianGlobal - ERR40' - endif - - endif + !if (Id < 0 .or. Jd < 0) then + ! + ! call TryIgnoreTimeSerie(Me%EulerModel(em)%ObjTimeSerie, dn, IgnoreOK, STAT = STAT_CALL) + ! if (STAT_CALL /= SUCCESS_) stop 'OutPut_TimeSeries - ModuleLagrangianGlobal - ERR30' + ! + ! if (IgnoreOK) then + ! cycle + ! else + ! stop 'OutPut_TimeSeries - ModuleLagrangianGlobal - ERR40' + ! endif + ! + !endif kd = GetLayer4Level(Me%EulerModel(em)%ObjGeometry, id, jd, DepthLevel, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'OutPut_TimeSeries - ModuleLagrangianGlobal - ERR50' @@ -25634,10 +25692,25 @@ subroutine OutPut_TimeSeries CurrentProperty => CurrentProperty%Next enddo + !Deallocates Temporary Matrixes deallocate (GridConc3D) - + + call WriteTimeSerie(Me%EulerModel(em)%ObjTimeSerie, & + Data3D = Me%EulerModel(em)%Velocity_U, & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'OutPut_TimeSeries - ModuleLagrangianGlobal - ERR80' + + call WriteTimeSerie(Me%EulerModel(em)%ObjTimeSerie, & + Data3D = Me%EulerModel(em)%Velocity_V, & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'OutPut_TimeSeries - ModuleLagrangianGlobal - ERR90' + + call WriteTimeSerie(Me%EulerModel(em)%ObjTimeSerie, & + Data3D = Me%EulerModel(em)%Velocity_W, & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'OutPut_TimeSeries - ModuleLagrangianGlobal - ERR100' ! enddo d2 enddo d1 @@ -29405,130 +29478,121 @@ subroutine ReadLockExternalVar call ReadLockHorizontalGrid(EulerModel) - i1: if (.not. Me%RunOnlyMov2D) then + call GetGridData (EulerModel%ObjGridData, EulerModel%Bathymetry, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR20' - !Gets Bathymetry - call GetGridData (EulerModel%ObjGridData, EulerModel%Bathymetry, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR20' + !Gets ExteriorPoints 2D + call GetBoundaries (EulerModel%ObjHorizontalMap, EulerModel%BoundaryPoints2D, & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR30' - !Gets ExteriorPoints 2D - call GetBoundaries (EulerModel%ObjHorizontalMap, EulerModel%BoundaryPoints2D, & - STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR30' - - !Gets water points 2D - call GetWaterPoints2D (EulerModel%ObjHorizontalMap, EulerModel%WaterPoints2D, & - STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR35' + !Gets water points 2D + call GetWaterPoints2D (EulerModel%ObjHorizontalMap, EulerModel%WaterPoints2D, & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR35' - !WaterColumn - call GetGeometryWaterColumn(EulerModel%ObjGeometry, EulerModel%WaterColumn, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR40' + !WaterColumn + call GetGeometryWaterColumn(EulerModel%ObjGeometry, EulerModel%WaterColumn, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR40' - !SZZ, DWZ - call GetGeometryDistances(EulerModel%ObjGeometry, & - SZZ = EulerModel%SZZ, & - ZCellCenter = EulerModel%ZCellCenter, & - DWZ = EulerModel%DWZ, & - DWZ_Xgrad = EulerModel%DWZ_Xgrad, & - DWZ_Ygrad = EulerModel%DWZ_Ygrad, & - STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR50' + !SZZ, DWZ + call GetGeometryDistances(EulerModel%ObjGeometry, & + SZZ = EulerModel%SZZ, & + ZCellCenter = EulerModel%ZCellCenter, & + DWZ = EulerModel%DWZ, & + DWZ_Xgrad = EulerModel%DWZ_Xgrad, & + DWZ_Ygrad = EulerModel%DWZ_Ygrad, & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR50' - !VolumeZ - call GetGeometryVolumes(EulerModel%ObjGeometry, & - VolumeZ = EulerModel%VolumeZ, & - STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR60' + !VolumeZ + call GetGeometryVolumes(EulerModel%ObjGeometry, & + VolumeZ = EulerModel%VolumeZ, & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR60' - !kFloorZ - call GetGeometryKFloor (EulerModel%ObjGeometry, & - Z = EulerModel%kFloor, & - STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR70' + !kFloorZ + call GetGeometryKFloor (EulerModel%ObjGeometry, & + Z = EulerModel%kFloor, & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR70' - !WaterPoints3D - call GetWaterPoints3D(EulerModel%ObjMap, EulerModel%Waterpoints3D, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR80' + !WaterPoints3D + call GetWaterPoints3D(EulerModel%ObjMap, EulerModel%Waterpoints3D, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR80' - !LandPoints3D - call GetLandPoints3D(EulerModel%ObjMap, EulerModel%LandPoints3D, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR90' + !LandPoints3D + call GetLandPoints3D(EulerModel%ObjMap, EulerModel%LandPoints3D, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR90' - !OpenPoints3D - call GetOpenPoints3D(EulerModel%ObjMap, EulerModel%OpenPoints3D, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR100' + !OpenPoints3D + call GetOpenPoints3D(EulerModel%ObjMap, EulerModel%OpenPoints3D, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR100' - !Compute faces - call GetComputeFaces3D(EulerModel%ObjMap, & - ComputeFacesU3D = EulerModel%ComputeFaces3D_U, & - ComputeFacesV3D = EulerModel%ComputeFaces3D_V, & - STAT= STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR110' + !Compute faces + call GetComputeFaces3D(EulerModel%ObjMap, & + ComputeFacesU3D = EulerModel%ComputeFaces3D_U, & + ComputeFacesV3D = EulerModel%ComputeFaces3D_V, & + STAT= STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR110' - !Lupward, Ldownward - call GetMixingLengthVertical(EulerModel%ObjTurbulence, & - Lupward = EulerModel%Lupward, & - Ldownward = EulerModel%Ldownward, & - STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR120' + !Lupward, Ldownward + call GetMixingLengthVertical(EulerModel%ObjTurbulence, & + Lupward = EulerModel%Lupward, & + Ldownward = EulerModel%Ldownward, & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR120' - !MixingLengthX, MixingLengthY - call GetMixingLengthHorizontal(EulerModel%ObjTurbulence, & - MixingLengthX = EulerModel%MixingLengthX,& - MixingLengthY = EulerModel%MixingLengthY,& - STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR130' + !MixingLengthX, MixingLengthY + call GetMixingLengthHorizontal(EulerModel%ObjTurbulence, & + MixingLengthX = EulerModel%MixingLengthX,& + MixingLengthY = EulerModel%MixingLengthY,& + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR130' - !Velocity_U, Velocity_V - call GetHorizontalVelocity(EulerModel%ObjHydrodynamic, & - Velocity_U = EulerModel%Velocity_U, & - Velocity_V = EulerModel%Velocity_V, & - STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR140' + !Velocity_U, Velocity_V + call GetHorizontalVelocity(EulerModel%ObjHydrodynamic, & + Velocity_U = EulerModel%Velocity_U, & + Velocity_V = EulerModel%Velocity_V, & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR140' - !Velocity_W - call GetVerticalVelocity(EulerModel%ObjHydrodynamic, & - Velocity_W = EulerModel%Velocity_W, & - STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR150' + !Velocity_W + call GetVerticalVelocity(EulerModel%ObjHydrodynamic, & + Velocity_W = EulerModel%Velocity_W, & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR150' #ifndef _WAVES_ - if (Me%State%Waves .and. .not. Me%ConstructLag) then - - call GetWaves (WavesID = EulerModel%ObjWaves, & - WavePeriod = EulerModel%WavePeriod2D, & - WaveHeight = EulerModel%WaveHeight2D, & - WaveDirection= EulerModel%WaveDirection2D, & - WaveLength = EulerModel%WaveLength2D, & - STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) then - write(*,*) - write(*,*) 'Error opening Wave properties' - write(*,*) 'Check if Wave module is properly configured' - stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR160' - end if - endif + if (Me%State%Waves .and. .not. Me%ConstructLag) then + + call GetWaves (WavesID = EulerModel%ObjWaves, & + WavePeriod = EulerModel%WavePeriod2D, & + WaveHeight = EulerModel%WaveHeight2D, & + WaveDirection= EulerModel%WaveDirection2D, & + WaveLength = EulerModel%WaveLength2D, & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) then + write(*,*) + write(*,*) 'Error opening Wave properties' + write(*,*) 'Check if Wave module is properly configured' + stop 'ReadLockExternalVar - ModuleLagrangianGlobal - ERR160' + end if + endif #endif - else i1 - - !Allocate 3D matrixes needed - - endif i1 - enddo em1 nullify(EulerModel) @@ -29638,136 +29702,128 @@ subroutine ReadUnLockExternalVar call ReadUnLockHorizontalGrid(EulerModel) -i1: if (.not. Me%RunOnlyMov2D) then - - !Gets Bathymetry - call UnGetGridData (EulerModel%ObjGridData, EulerModel%Bathymetry, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR50' + !Gets Bathymetry + call UnGetGridData (EulerModel%ObjGridData, EulerModel%Bathymetry, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR50' - !Gets ExteriorPoints 2D - call UngetHorizontalMap (EulerModel%ObjHorizontalMap, EulerModel%BoundaryPoints2D, & - STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR60' + !Gets ExteriorPoints 2D + call UngetHorizontalMap (EulerModel%ObjHorizontalMap, EulerModel%BoundaryPoints2D, & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR60' - call UngetHorizontalMap (EulerModel%ObjHorizontalMap, EulerModel%WaterPoints2D, & - STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR65' + call UngetHorizontalMap (EulerModel%ObjHorizontalMap, EulerModel%WaterPoints2D, & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR65' - !WaterColumn - call UnGetGeometry (EulerModel%ObjGeometry, EulerModel%WaterColumn, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR70' + !WaterColumn + call UnGetGeometry (EulerModel%ObjGeometry, EulerModel%WaterColumn, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR70' - !SZZ - call UnGetGeometry (EulerModel%ObjGeometry, EulerModel%SZZ, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR80' + !SZZ + call UnGetGeometry (EulerModel%ObjGeometry, EulerModel%SZZ, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR80' - !ZCellCenter - call UnGetGeometry (EulerModel%ObjGeometry, EulerModel%ZCellCenter, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR90' + !ZCellCenter + call UnGetGeometry (EulerModel%ObjGeometry, EulerModel%ZCellCenter, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR90' - !DWZ - call UnGetGeometry (EulerModel%ObjGeometry, EulerModel%DWZ, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR100' + !DWZ + call UnGetGeometry (EulerModel%ObjGeometry, EulerModel%DWZ, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR100' - !VolumeZ - call UnGetGeometry (EulerModel%ObjGeometry, EulerModel%VolumeZ, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR110' + !VolumeZ + call UnGetGeometry (EulerModel%ObjGeometry, EulerModel%VolumeZ, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR110' - !kFloorZ - call UnGetGeometry (EulerModel%ObjGeometry, EulerModel%kFloor, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR120' + !kFloorZ + call UnGetGeometry (EulerModel%ObjGeometry, EulerModel%kFloor, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR120' - !DWZ_Xgrad - call UnGetGeometry (EulerModel%ObjGeometry, EulerModel%DWZ_Xgrad, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR122' + !DWZ_Xgrad + call UnGetGeometry (EulerModel%ObjGeometry, EulerModel%DWZ_Xgrad, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR122' - !DWZ_Ygrad - call UnGetGeometry (EulerModel%ObjGeometry, EulerModel%DWZ_Ygrad, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR124' + !DWZ_Ygrad + call UnGetGeometry (EulerModel%ObjGeometry, EulerModel%DWZ_Ygrad, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR124' - !WaterPoints3D - call UnGetMap (EulerModel%ObjMap, EulerModel%Waterpoints3D, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR130' + !WaterPoints3D + call UnGetMap (EulerModel%ObjMap, EulerModel%Waterpoints3D, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR130' - !LandPoints3D - call UnGetMap (EulerModel%ObjMap, EulerModel%LandPoints3D, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR140' + !LandPoints3D + call UnGetMap (EulerModel%ObjMap, EulerModel%LandPoints3D, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR140' - !OpenPoints3D - call UnGetMap (EulerModel%ObjMap, EulerModel%OpenPoints3D, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR150' + !OpenPoints3D + call UnGetMap (EulerModel%ObjMap, EulerModel%OpenPoints3D, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR150' - !Compute faces U - call UnGetMap (EulerModel%ObjMap, EulerModel%ComputeFaces3D_U, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR160' + !Compute faces U + call UnGetMap (EulerModel%ObjMap, EulerModel%ComputeFaces3D_U, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR160' - !Compute faces V - call UnGetMap (EulerModel%ObjMap, EulerModel%ComputeFaces3D_V, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR170' + !Compute faces V + call UnGetMap (EulerModel%ObjMap, EulerModel%ComputeFaces3D_V, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR170' - !Lupward - call UngetTurbulence(EulerModel%ObjTurbulence, EulerModel%Lupward, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR180' + !Lupward + call UngetTurbulence(EulerModel%ObjTurbulence, EulerModel%Lupward, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR180' - !Ldownward - call UngetTurbulence(EulerModel%ObjTurbulence, EulerModel%Ldownward, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR190' + !Ldownward + call UngetTurbulence(EulerModel%ObjTurbulence, EulerModel%Ldownward, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR190' - !MixingLengthX - call UngetTurbulence(EulerModel%ObjTurbulence, EulerModel%MixingLengthX, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR200' + !MixingLengthX + call UngetTurbulence(EulerModel%ObjTurbulence, EulerModel%MixingLengthX, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR200' - !MixingLengthY - call UngetTurbulence(EulerModel%ObjTurbulence, EulerModel%MixingLengthY, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR210' + !MixingLengthY + call UngetTurbulence(EulerModel%ObjTurbulence, EulerModel%MixingLengthY, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR210' - !Velocity_U - call UngetHydrodynamic (EulerModel%ObjHydrodynamic, EulerModel%Velocity_U, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR220' + !Velocity_U + call UngetHydrodynamic (EulerModel%ObjHydrodynamic, EulerModel%Velocity_U, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR220' - !Velocity_V - call UngetHydrodynamic (EulerModel%ObjHydrodynamic, EulerModel%Velocity_V, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR230' + !Velocity_V + call UngetHydrodynamic (EulerModel%ObjHydrodynamic, EulerModel%Velocity_V, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR230' - !Velocity_W - call UngetHydrodynamic (EulerModel%ObjHydrodynamic, EulerModel%Velocity_W, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR240' + !Velocity_W + call UngetHydrodynamic (EulerModel%ObjHydrodynamic, EulerModel%Velocity_W, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR240' #ifndef _WAVES_ - if (Me%State%Waves .and. .not. Me%ConstructLag) then + if (Me%State%Waves .and. .not. Me%ConstructLag) then - call UnGetWaves (EulerModel%ObjWaves, EulerModel%WavePeriod2D, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR250' + call UnGetWaves (EulerModel%ObjWaves, EulerModel%WavePeriod2D, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR250' - call UnGetWaves (EulerModel%ObjWaves, EulerModel%WaveHeight2D, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR260' + call UnGetWaves (EulerModel%ObjWaves, EulerModel%WaveHeight2D, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR260' - call UnGetWaves (EulerModel%ObjWaves, EulerModel%WaveDirection2D, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR270' + call UnGetWaves (EulerModel%ObjWaves, EulerModel%WaveDirection2D, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR270' - call UnGetWaves (EulerModel%ObjWaves, EulerModel%WaveLength2D, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR270' + call UnGetWaves (EulerModel%ObjWaves, EulerModel%WaveLength2D, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadUnLockExternalVar - ModuleLagrangianGlobal - ERR270' - endif + endif #endif - else i1 - - !Allocate 3D matrixes needed - - endif i1 - enddo em1 nullify(EulerModel) diff --git a/Software/MOHIDWater/ModuleModel.F90 b/Software/MOHIDWater/ModuleModel.F90 index 744f59b20..379a5a4e3 100644 --- a/Software/MOHIDWater/ModuleModel.F90 +++ b/Software/MOHIDWater/ModuleModel.F90 @@ -324,13 +324,14 @@ Module ModuleModel !In this subroutine is read the model structure (number of parallel models and their sub-models) ! and the necessary memory is allocate and store in a structure of pointer lists - subroutine ConstructModel (LagInstance, ModelNames, NumberOfModels, & + subroutine ConstructModel (LagInstance, ModelNames, ModelPaths, NumberOfModels, & ObjLagrangianGlobal, ModelID, InitialSystemTime, & MPI_ID, MasterID, LastSlaveID, ModelPath, STAT) !Arguments------------------------------------------------------------- integer , dimension(:,:), pointer :: LagInstance character(len=*), dimension(: ), pointer :: ModelNames + character(len=*), dimension(: ), pointer :: ModelPaths integer :: NumberOfModels, ObjLagrangianGlobal, ModelID type (T_Time) :: InitialSystemTime integer, intent(IN ), optional :: MPI_ID @@ -913,6 +914,7 @@ subroutine ConstructModel (LagInstance, ModelNames, NumberOfModels, call ConstructLagrangianGlobal(LagrangianID = Me%ObjLagrangianGlobal,& Nmodels = Me%NumberOfModels, & ModelNames = ModelNames, & + ModelPaths = ModelPaths, & FileNomfich = LagNomfich, & LagInstance = LagInstance, & STAT = STAT_CALL) diff --git a/Software/MOHIDWater/ModuleWaterProperties.F90 b/Software/MOHIDWater/ModuleWaterProperties.F90 index 9fd8fd078..2834fb592 100644 --- a/Software/MOHIDWater/ModuleWaterProperties.F90 +++ b/Software/MOHIDWater/ModuleWaterProperties.F90 @@ -849,6 +849,7 @@ Module ModuleWaterProperties real :: scalar = FillValueReal real, pointer, dimension(:,:,:) :: Field real, pointer, dimension(:,:,:) :: DecayTime + character(len=StringLength) :: GroupOutPutName end type T_LocalAssimila @@ -3166,20 +3167,18 @@ subroutine Construct_CohortPropFromFile (NewProperty, Species, OverrideKeyword) NewProperty%Concentration( IUB, WJLB:WJUB, WKLB:WKUB) = 0.0 - !if (NewProperty%Evolution%DataAssimilation /= NoNudging) then - !By default the assimilation field is equal to the initial one - -do3 : do K = WKLB, WKUB -do2 : do J = JLB, JUB -do1 : do I = ILB, IUB + !By default the assimilation field is equal to the initial one - NewProperty%Assimilation%Field(I, J, K) = NewProperty%Concentration(i,j,k) +do3 : do K = WKLB, WKUB +do2 : do J = JLB, JUB +do1 : do I = ILB, IUB - end do do1 - end do do2 - end do do3 + NewProperty%Assimilation%Field(I, J, K) = NewProperty%Concentration(i,j,k) - !endif + end do do1 + end do do2 + end do do3 + call GetData(BoundaryMethod, & Me%ObjEnterData, iflag, & @@ -8303,7 +8302,7 @@ subroutine Construct_PropertyEvolution(NewProperty,ClientNumber) STAT = STAT_CALL) if (STAT_CALL .NE. SUCCESS_) & call CloseAllAndStop ('Subroutine Construct_PropertyEvolution - ModuleWaterProperties - ERR150') - + if (NewProperty%Evolution%DataAssimilation /= NoNudging)then NewProperty%Evolution%Variable = .true. endif @@ -20261,6 +20260,9 @@ subroutine DataAssimilationProcesses ID = PropertyID, & NumberOfFields = NumberOfFields, & STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) & + call CloseAllAndStop ('DataAssimilationProcesses; WaterProperties. ERR15') + dnass : do N_Field = 1, NumberOfFields @@ -20274,7 +20276,7 @@ subroutine DataAssimilationProcesses PropAssimilation => Property%Assimilation%Field SubModelON = ON - + else i4 SubModelON = OFF @@ -22038,7 +22040,7 @@ subroutine OutPut_Results_HDF(iW) if (STAT_CALL /= SUCCESS_) call CloseAllAndStop ('OutPut_Results_HDF - ModuleWaterProperties - ERR30') call HDF5WriteData (ObjHDF5, "/Grid/VerticalZ", "Vertical", & - "m", Array3D = Me%ExternalVar%SZZ, & + "m", Array3D = Me%ExternalVar%SZZ, & OutputNumber = OutPutNumber, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) call CloseAllAndStop ('OutPut_Results_HDF - ModuleWaterProperties - ERR40') @@ -22088,31 +22090,50 @@ subroutine OutPut_Results_HDF(iW) trim(AuxGroup)//PropertyX%ID%Name, & PropertyX%ID%Name, & PropertyX%ID%Units, & - Array3D = Me%Output%Aux3Dreal4, & + Array3D = Me%Output%Aux3Dreal4, & OutputNumber = OutPutNumber, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) & + if (STAT_CALL /= SUCCESS_) & call CloseAllAndStop ('OutPut_Results_HDF - ModuleWaterProperties - ERR90') else - call HDF5WriteData(ObjHDF5, & - trim(AuxGroup)//PropertyX%ID%Name, & - PropertyX%ID%Name, & - PropertyX%ID%Units, & + call HDF5WriteData(ObjHDF5, & + trim(AuxGroup)//PropertyX%ID%Name, & + PropertyX%ID%Name, & + PropertyX%ID%Units, & Array3D = PropertyX%Concentration, & OutputNumber = OutPutNumber, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) & call CloseAllAndStop ('OutPut_Results_HDF - ModuleWaterProperties - ERR100') endif - if (associated(PropertyX%Assimilation%Field) .and. .not. SimpleOutPut) then + if (PropertyX%Evolution%DataAssimilation /= NoNudging .and. .not. SimpleOutPut) then + + i4 : if (PropertyX%SubModel%ON) then + + + PropertyX%Assimilation%GroupOutPutName = PropertyX%ID%Name - call HDF5WriteData(ObjHDF5, & - trim(AuxGroup)//'Assimila/'//PropertyX%ID%Name, & - PropertyX%ID%Name, & - PropertyX%ID%Units, & - Array3D = PropertyX%Assimilation%Field, & + else i4 + + call GetAssimilationField(AssimilationID = Me%ObjAssimilation, & + ID = PropertyX%ID%IDNumber,& + N_Field = 1, & + GroupOutPutName = PropertyX%Assimilation%GroupOutPutName,& + STAT = STAT_CALL) + + if (STAT_CALL /= SUCCESS_) then + call CloseAllAndStop ('OutPut_Results_HDF - ModuleWaterProperties - ERR105') + endif + end if i4 + + call HDF5WriteData(ObjHDF5, & + trim(AuxGroup)//'Assimila/'// & + trim(PropertyX%Assimilation%GroupOutPutName),& + PropertyX%ID%Name, & + PropertyX%ID%Units, & + Array3D = PropertyX%Assimilation%Field, & OutputNumber = OutPutNumber, STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) & + if (STAT_CALL /= SUCCESS_) & call CloseAllAndStop ('OutPut_Results_HDF - ModuleWaterProperties - ERR110') endif diff --git a/Software/SmallTools/Convert2netcdf/ConvertToNETCDF.F90 b/Software/SmallTools/Convert2netcdf/ConvertToNETCDF.F90 index 4221077b4..d5103fead 100644 --- a/Software/SmallTools/Convert2netcdf/ConvertToNETCDF.F90 +++ b/Software/SmallTools/Convert2netcdf/ConvertToNETCDF.F90 @@ -68,17 +68,17 @@ program Convert2netcdf implicit none type T_HDFFile - integer :: FileID - character(len=PathLength) :: Name + integer :: FileID = 0 + character(len=PathLength) :: Name = null_str integer :: ObjHDF5 = 0 - integer :: nInstants - real(8), dimension(:), pointer :: Times + integer :: nInstants = FillValueInt + real(8), dimension(:), pointer :: Times => null() type(T_Time) :: InitialDate type(T_Size3D) :: Size character(len=StringLength) :: SizeGroup, SizeDataSet - character(len=StringLength) :: HdfMask - character(len=StringLength) :: TimeVar - character(len=StringLength) :: VertVar + character(len=StringLength) :: HdfMask = null_str + character(len=StringLength) :: TimeVar = null_str + character(len=StringLength) :: VertVar = null_str logical :: ReadLatLon = .true. logical :: Sigma = .false. logical :: HdfMaskIs3D = .true. @@ -88,16 +88,26 @@ program Convert2netcdf end type T_HDFFile type T_NCDFFile - character(len=PathLength) :: Name - integer :: ObjNETCDF = 0 - character(len=StringLength) :: Title - character(len=StringLength) :: Convention - character(len=StringLength) :: Version - character(len=StringLength) :: History - character(len=StringLength) :: Source - character(len=StringLength) :: Institution - character(len=StringLength) :: References - integer :: iDate + character(len=PathLength) :: Name = null_str + integer :: ObjNETCDF = 0 + character(len=StringLength) :: Title = null_str + character(len=StringLength) :: Convention = null_str + character(len=StringLength) :: Version = null_str + character(len=StringLength) :: History = null_str + character(len=StringLength) :: Source = null_str + character(len=StringLength) :: Institution = null_str + character(len=StringLength) :: References = null_str + integer :: iDate = FillValueInt + real :: geospatial_lat_min = FillValueReal + real :: geospatial_lat_max = FillValueReal + real :: geospatial_lon_min = FillValueReal + real :: geospatial_lon_max = FillValueReal + character(len=StringLength) :: CoordSysBuilder = null_str + character(len=StringLength) :: contact = null_str + character(len=StringLength) :: field_type = null_str + character(len=StringLength) :: bulletin_date = null_str + character(len=StringLength) :: bulletin_type = null_str + character(len=StringLength) :: comment = null_str end type T_NCDFFile type T_Conv2netcdf @@ -196,23 +206,6 @@ subroutine ReadKeywords call ConstructEnterData (Me%ObjEnterData, Me%DataFile, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ReadKeywords - Convert2netcdf - ERR20' - call GetData(Me%HDFFile%Name, & - Me%ObjEnterData,iflag, & - SearchType = FromFile, & - keyword = 'HDF_FILE', & - ClientModule = 'Convert2netcdf', & - STAT = STAT_CALL) - if (STAT_CALL /= SUCCESS_) stop 'ReadKeywords - Convert2netcdf - ERR30' - - !Verifies if file exists - inquire(FILE = trim(Me%HDFFile%Name), EXIST = exist) - if (exist) then - call OpenHDF5File - else - write(*,*)'HDF5 file does not exist' - stop 'ReadKeywords - Convert2netcdf - ERR40' - endif - call GetData(Me%NCDF_File%Name, & Me%ObjEnterData,iflag, & SearchType = FromFile, & @@ -289,6 +282,115 @@ subroutine ReadKeywords ClientModule = 'Convert2netcdf', & STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ReadKeywords - Convert2netcdf - ERR130' + + + call GetData(Me%NCDF_File%geospatial_lat_min, & + Me%ObjEnterData,iflag, & + SearchType = FromFile, & + keyword = 'NETCDF_LAT_MIN', & + Default = -90., & + ClientModule = 'Convert2netcdf', & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadKeywords - Convert2netcdf - ERR400' + + call GetData(Me%NCDF_File%geospatial_lat_max, & + Me%ObjEnterData,iflag, & + SearchType = FromFile, & + keyword = 'NETCDF_LAT_MAX', & + Default = +90., & + ClientModule = 'Convert2netcdf', & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadKeywords - Convert2netcdf - ERR410' + + call GetData(Me%NCDF_File%geospatial_lon_min, & + Me%ObjEnterData,iflag, & + SearchType = FromFile, & + keyword = 'NETCDF_LON_MIN', & + Default = -180., & + ClientModule = 'Convert2netcdf', & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadKeywords - Convert2netcdf - ERR420' + + call GetData(Me%NCDF_File%geospatial_lon_max, & + Me%ObjEnterData,iflag, & + SearchType = FromFile, & + keyword = 'NETCDF_LON_MAX', & + Default = +180., & + ClientModule = 'Convert2netcdf', & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadKeywords - Convert2netcdf - ERR430' + + call GetData(Me%NCDF_File%CoordSysBuilder, & + Me%ObjEnterData,iflag, & + SearchType = FromFile, & + keyword = 'NETCDF_COORD_SYSTEM', & + Default = "ucar.nc2.dataset.conv.CF1Convention", & + ClientModule = 'Convert2netcdf', & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadKeywords - Convert2netcdf - ERR440' + + call GetData(Me%NCDF_File%contact, & + Me%ObjEnterData,iflag, & + SearchType = FromFile, & + keyword = 'NETCDF_CONTACT', & + Default = "general@mohid.com", & + ClientModule = 'Convert2netcdf', & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadKeywords - Convert2netcdf - ERR450' + + call GetData(Me%NCDF_File%field_type, & + Me%ObjEnterData,iflag, & + SearchType = FromFile, & + keyword = 'NETCDF_FIELD_TYPE', & + Default = "mean", & + ClientModule = 'Convert2netcdf', & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadKeywords - Convert2netcdf - ERR460' + + call GetData(Me%NCDF_File%bulletin_date, & + Me%ObjEnterData,iflag, & + SearchType = FromFile, & + keyword = 'NETCDF_BULLETIN_DATE', & + Default = "2018-01-01 00:00:00", & + ClientModule = 'Convert2netcdf', & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadKeywords - Convert2netcdf - ERR470' + + call GetData(Me%NCDF_File%bulletin_type, & + Me%ObjEnterData,iflag, & + SearchType = FromFile, & + keyword = 'NETCDF_BULLETIN_TYPE', & + Default = "operational", & + ClientModule = 'Convert2netcdf', & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadKeywords - Convert2netcdf - ERR480' + + call GetData(Me%NCDF_File%comment, & + Me%ObjEnterData,iflag, & + SearchType = FromFile, & + keyword = 'NETCDF_COMMENT', & + Default = "MOHID product", & + ClientModule = 'Convert2netcdf', & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadKeywords - Convert2netcdf - ERR490' + + call GetData(Me%HDFFile%Name, & + Me%ObjEnterData,iflag, & + SearchType = FromFile, & + keyword = 'HDF_FILE', & + ClientModule = 'Convert2netcdf', & + STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ReadKeywords - Convert2netcdf - ERR30' + + !Verifies if file exists + inquire(FILE = trim(Me%HDFFile%Name), EXIST = exist) + if (exist) then + call OpenHDF5File + else + write(*,*)'HDF5 file does not exist' + stop 'ReadKeywords - Convert2netcdf - ERR40' + endif + call GetData(Me%HDFFile%TimeVar, & Me%ObjEnterData,iflag, & @@ -558,6 +660,8 @@ subroutine ReadKeywords if (STAT_CALL /= SUCCESS_) stop 'ReadKeywords - Convert2netcdf - ERR380' + + call KillEnterData (Me%ObjEnterData, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'ReadKeywords - Convert2netcdf - ERR990' @@ -631,13 +735,21 @@ end subroutine ReadVGroupsToConvert subroutine ModifyConvert2netcdf !Local----------------------------------------------------------------- - + integer :: STAT_CALL !Begin----------------------------------------------------------------- !call OpenHDF5File + - call OpenNCDFFile + call GetHDF5FileID (Me%HDFFile%ObjHDF5, Me%HDFFile%FileID, STAT = STAT_CALL) + if (STAT_CALL /= SUCCESS_) stop 'ModifyConvert2netcdf - Convert2netcdf - ERR10' + call ReadSetDimensions + + call ReadLatLonWindow + + call OpenNCDFFile + call ReadWriteTime call ReadWriteGrid @@ -702,18 +814,39 @@ subroutine OpenNCDFFile call ConstructNETCDF(Me%NCDF_File%ObjNETCDF, Me%NCDF_File%Name, NCDF_CREATE, STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'OpenNCDFFile - Convert2netcdf - ERR01' - call NETCDFWriteHeader(NCDFID = Me%NCDF_File%ObjNETCDF, & - Title = Me%NCDF_File%Title, & - Convention = Me%NCDF_File%Convention, & - Version = Me%NCDF_File%Version, & - History = Me%NCDF_File%History, & - iDate = Me%NCDF_File%iDate, & - Source = Me%NCDF_File%Source, & - Institution = Me%NCDF_File%Institution, & - References = Me%NCDF_File%References, & - STAT = STAT_CALL) + call NETCDFWriteHeader (NCDFID = Me%NCDF_File%ObjNETCDF, & + Title = Me%NCDF_File%Title, & + Convention = Me%NCDF_File%Convention, & + Version = Me%NCDF_File%Version, & + History = Me%NCDF_File%History, & + iDate = Me%NCDF_File%iDate, & + Source = Me%NCDF_File%Source, & + Institution = Me%NCDF_File%Institution, & + References = Me%NCDF_File%References, & + geospatial_lat_min = Me%NCDF_File%geospatial_lat_min,& + geospatial_lat_max = Me%NCDF_File%geospatial_lat_max,& + geospatial_lon_min = Me%NCDF_File%geospatial_lon_min,& + geospatial_lon_max = Me%NCDF_File%geospatial_lon_max,& + CoordSysBuilder = Me%NCDF_File%CoordSysBuilder, & + contact = Me%NCDF_File%contact, & + field_type = Me%NCDF_File%field_type, & + bulletin_date = Me%NCDF_File%bulletin_date, & + bulletin_type = Me%NCDF_File%bulletin_type, & + comment = Me%NCDF_File%comment, & + STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'OpenNCDFFile - Convert2netcdf - ERR02' + if (Me%DepthLayersON) then + call NETCDFSetDimensions(Me%NCDF_File%ObjNETCDF, int(Me%HDFFile%Size%IUB,4),int(Me%HDFFile%Size%JUB,4), & + int(Me%DepthLayers,4), SimpleGrid = Me%SimpleGrid, STAT = STAT_CALL) + if (STAT_CALL .NE. SUCCESS_) stop 'ReadSetDimensions - Convert2netcdf - ERR20' + else + call NETCDFSetDimensions(Me%NCDF_File%ObjNETCDF, int(Me%HDFFile%Size%IUB,4), int(Me%HDFFile%Size%JUB,4),& + int(Me%HDFFile%Size%KUB,4), SimpleGrid = Me%SimpleGrid, STAT = STAT_CALL) + if (STAT_CALL .NE. SUCCESS_) stop 'ReadSetDimensions - Convert2netcdf - ERR30' + endif + + write(*,*) write(*,*)'Opened ncdf file : ', trim(Me%NCDF_File%Name) @@ -775,11 +908,6 @@ subroutine ReadWriteGrid write(*,*)"Reading grid..." write(*,*) - call GetHDF5FileID (Me%HDFFile%ObjHDF5, Me%HDFFile%FileID, STAT = STAT_CALL) - if (STAT_CALL .NE. SUCCESS_) stop 'ReadWriteGrid - Convert2netcdf - ERR01' - - call ReadSetDimensions - call ReadWriteLatLon if (Me%HDFFile%Size%KUB .gt. 0 .and. .not. Me%HDFFile%OutputIs2D) then @@ -874,16 +1002,6 @@ subroutine ReadSetDimensions Me%HDFFile%Size%JUB = dims(2) Me%HDFFile%Size%KUB = dims(3) - if (Me%DepthLayersON) then - call NETCDFSetDimensions(Me%NCDF_File%ObjNETCDF, int(dims(1),4),int(dims(2),4), & - int(Me%DepthLayers,4), SimpleGrid = Me%SimpleGrid, STAT = STAT_CALL) - if (STAT_CALL .NE. SUCCESS_) stop 'ReadSetDimensions - Convert2netcdf - ERR20' - else - call NETCDFSetDimensions(Me%NCDF_File%ObjNETCDF, int(dims(1),4), int(dims(2),4),& - int(dims(3),4), SimpleGrid = Me%SimpleGrid, STAT = STAT_CALL) - if (STAT_CALL .NE. SUCCESS_) stop 'ReadSetDimensions - Convert2netcdf - ERR30' - endif - write(*,*) write(*,*)"IUB", Me%HDFFile%Size%IUB write(*,*)"JUB", Me%HDFFile%Size%JUB @@ -1016,7 +1134,68 @@ subroutine ReadWriteLatLon end subroutine ReadWriteLatLon + !-------------------------------------------------------------------------- + + subroutine ReadLatLonWindow + + !Local----------------------------------------------------------------- + integer :: STAT_CALL, i, j + real, dimension(:,:), pointer :: Lat, Lon, Lat_Stag, Lon_Stag, Aux4 + real(8), dimension(:,:), pointer :: SphericX, SphericY + character(len=StringLength) :: LatVar, LonVar + + !Begin----------------------------------------------------------------- + + write(*,*)"Reading latitude and longitude window..." + + allocate(Aux4 (1:Me%HDFFile%Size%IUB+1, 1:Me%HDFFile%Size%JUB+1)) + + allocate(Lat (1:Me%HDFFile%Size%JUB, 1:Me%HDFFile%Size%IUB)) + allocate(Lon (1:Me%HDFFile%Size%JUB, 1:Me%HDFFile%Size%IUB)) + + call HDF5SetLimits(Me%HDFFile%ObjHDF5, ILB = 1, IUB = Me%HDFFile%Size%IUB+1, & + JLB = 1, JUB = Me%HDFFile%Size%JUB+1, & + STAT = STAT_CALL) + if (STAT_CALL .NE. SUCCESS_) stop 'ReadLatLonWindow - Convert2netcdf - ERR10' + + if(Me%HDFFile%ReadLatLon)then + LatVar = "Latitude" + LonVar = "Longitude" + else + LatVar = "ConnectionY" + LonVar = "ConnectionX" + end if + + call HDF5ReadData(HDF5ID = Me%HDFFile%ObjHDF5, & + GroupName = "/Grid", & + Name = trim(LatVar), & + Array2D = Aux4, & + STAT = STAT_CALL) + if (STAT_CALL .NE. SUCCESS_) stop 'ReadLatLonWindow - Convert2netcdf - ERR20' + + Me%NCDF_File%geospatial_lat_min = Aux4(1,1) + Me%NCDF_File%geospatial_lat_max = Aux4(Me%HDFFile%Size%IUB+1,Me%HDFFile%Size%JUB+1) + + call HDF5ReadData(HDF5ID = Me%HDFFile%ObjHDF5, & + GroupName = "/Grid", & + Name = trim(LonVar), & + Array2D = Aux4, & + STAT = STAT_CALL) + if (STAT_CALL .NE. SUCCESS_) stop 'ReadLatLonWindow - Convert2netcdf - ERR30' + + Me%NCDF_File%geospatial_lon_min = Aux4(1,1) + Me%NCDF_File%geospatial_lon_max = Aux4(Me%HDFFile%Size%IUB+1,Me%HDFFile%Size%JUB+1) + + deallocate(Lat, Lon) + nullify (Lat, Lon) + + write(*,*)"Done!" + write(*,*) + + end subroutine ReadLatLonWindow + + !-------------------------------------------------------------------------- subroutine ReadDepthIn3D(OutputNumber) @@ -1139,6 +1318,7 @@ subroutine WriteDepthLayers call NETCDFWriteVert(NCDFID = Me%NCDF_File%ObjNETCDF, & Vert = Me%DepthVector, & VertCoordinate = .false., & + SimpleGrid = Me%SimpleGrid, & OffSet = Me%DepthAddOffSet, & STAT = STAT_CALL) if (STAT_CALL /= SUCCESS_) stop 'WriteDepthLayers - Convert2netcdf - ERR10' @@ -1301,6 +1481,7 @@ subroutine ReadWriteVertical call NETCDFWriteVert(NCDFID = Me%NCDF_File%ObjNETCDF, & Vert = Vert1D, & VertCoordinate = Me%HDFFile%Sigma, & + SimpleGrid = Me%SimpleGrid, & OffSet = Me%DepthAddOffSet, & STAT = STAT_CALL) if (STAT_CALL .NE. SUCCESS_) stop 'ReadWriteVertical - Convert2netcdf - ERR05' @@ -1355,6 +1536,7 @@ subroutine WriteVerticalNullDepth call NETCDFWriteVert(NCDFID = Me%NCDF_File%ObjNETCDF, & Vert = Vert1D, & VertCoordinate = Me%HDFFile%Sigma, & + SimpleGrid = Me%SimpleGrid, & OffSet = Me%DepthAddOffSet, & STAT = STAT_CALL) if (STAT_CALL .NE. SUCCESS_) stop 'WriteVerticalNullDepth - Convert2netcdf - ERR10' @@ -1827,7 +2009,7 @@ subroutine BuildAttributes(Name, NCDFName, LongName, StandardName, Units, NCDFName = "mask" LongName = "mask of potential water points" StandardName = "land_binary_mask" - Units = "" + Units = null_str ValidMin = 0 ValidMax = 1 MissingValue = -99 @@ -1836,7 +2018,7 @@ subroutine BuildAttributes(Name, NCDFName, LongName, StandardName, Units, NCDFName = "mask" LongName = "mask of effective water points at one given instant" StandardName = "mask" - Units = "" + Units = null_str ValidMin = 0 ValidMax = 1 MissingValue = -99 @@ -1854,7 +2036,7 @@ subroutine BuildAttributes(Name, NCDFName, LongName, StandardName, Units, NCDFName = "salinity" LongName = "sea water salinity" StandardName = "sea_water_salinity" - Units = "PSU" + Units = "1e-3" ValidMin = 0. ValidMax = 40. MissingValue = Me%MissingValue @@ -1936,9 +2118,17 @@ subroutine BuildAttributes(Name, NCDFName, LongName, StandardName, Units, LongName = "wind speed" StandardName = "wind_speed" Units = "m s-1" - ValidMin = -100. + ValidMin = 0.0 ValidMax = 100. MissingValue = Me%MissingValue + case("wind_gust") + NCDFName = "wind_speed_of_gust" + LongName = "wind speed of gust" + StandardName = "wind_speed_of_gust" + Units = "m s-1" + ValidMin = 0.0 + ValidMax = 200. + MissingValue = Me%MissingValue case("wind_velocity_X") NCDFName = "x_wind" LongName = "x wind" @@ -1967,9 +2157,9 @@ subroutine BuildAttributes(Name, NCDFName, LongName, StandardName, Units, MissingValue = Me%MissingValue case("atmospheric_pressure") - NCDFName = "atmospheric_pressure" - LongName = "atmospheric pressure" - StandardName = "atmospheric_pressure" + NCDFName = "air_pressure_at_mean_sea_level" + LongName = "air_pressure_at_mean_sea_level" + StandardName = "air_pressure_at_mean_sea_level" Units = "Pa" ValidMin = 85000. ValidMax = 110000. @@ -2024,7 +2214,7 @@ subroutine BuildAttributes(Name, NCDFName, LongName, StandardName, Units, NCDFName = "phytoplankton" LongName = "mole concentration of phytoplankton expressed as carbon in sea water" StandardName = "mole_concentration_of_phytoplankton_expressed_as_carbon_in_sea_water" - Units = "mol m-3" + Units = "millimol m-3" Multiply_Factor_ = 1000./12.0107 ValidMin = 0. * Multiply_Factor_ ValidMax = 10. * Multiply_Factor_ @@ -2034,7 +2224,7 @@ subroutine BuildAttributes(Name, NCDFName, LongName, StandardName, Units, NCDFName = "zooplankton" LongName = "mole concentration of zooplankton expressed as carbon in sea water" StandardName = "mole_concentration_of_zooplankton_expressed_as_carbon_in_sea_water" - Units = "mol m-3" + Units = "millimol m-3" Multiply_Factor_ = 1000./12.0107 ValidMin = 0. * Multiply_Factor_ ValidMax = 10. * Multiply_Factor_ @@ -2044,7 +2234,7 @@ subroutine BuildAttributes(Name, NCDFName, LongName, StandardName, Units, NCDFName = "nitrate" LongName = "mole concentration of nitrate in sea water" StandardName = "mole_concentration_of_nitrate_in_sea_water" - Units = "mol m-3" + Units = "millimol m-3" Multiply_Factor_ = 1000./14.0067 ValidMin = 0. * Multiply_Factor_ ValidMax = 10. * Multiply_Factor_ @@ -2054,7 +2244,7 @@ subroutine BuildAttributes(Name, NCDFName, LongName, StandardName, Units, NCDFName = "ammonia" LongName = "mole concentration of ammonium in sea water" StandardName = "mole_concentration_of_ammonium_in_sea_water" - Units = "mol m-3" + Units = "millimol m-3" Multiply_Factor_ = 1000./14.0067 ValidMin = 0. * Multiply_Factor_ ValidMax = 10. * Multiply_Factor_ @@ -2073,7 +2263,7 @@ subroutine BuildAttributes(Name, NCDFName, LongName, StandardName, Units, NCDFName = "inorganic_phosphorus" LongName = "mole concentration of phosphate in sea water" StandardName = "mole_concentration_of_phosphate_in_sea_water" - Units = "mol m-3" + Units = "millimol m-3" Multiply_Factor_ = 1000./30.974 ValidMin = 0. * Multiply_Factor_ ValidMax = 10. * Multiply_Factor_ @@ -2083,7 +2273,7 @@ subroutine BuildAttributes(Name, NCDFName, LongName, StandardName, Units, NCDFName = "particulate_organic_nitrogen" LongName = "mole concentration of particulate organic matter expressed as nitrogen in sea water" StandardName = "mole_concentration_of_particulate_organic_matter_expressed_as_nitrogen_in_sea_water" - Units = "mol m-3" + Units = "millimol m-3" Multiply_Factor_ = 1000./14.0067 ValidMin = 0. * Multiply_Factor_ ValidMax = 10. * Multiply_Factor_ @@ -2093,7 +2283,7 @@ subroutine BuildAttributes(Name, NCDFName, LongName, StandardName, Units, NCDFName = "particulate_organic_phosphorus" LongName = "mole concentration of particulate organic matter expressed as phosphorus in sea water" StandardName = "mole_concentration_of_particulate_organic_matter_expressed_as_phosphorus_in_sea_water" - Units = "mol m-3" + Units = "millimol m-3" Multiply_Factor_ = 1000./30.974 ValidMin = 0. * Multiply_Factor_ ValidMax = 10. * Multiply_Factor_ @@ -2190,6 +2380,7 @@ subroutine BuildAttributes(Name, NCDFName, LongName, StandardName, Units, ValidMin = 0. ValidMax = 30. MissingValue = Me%MissingValue + case default NCDFName = trim(adjustl(Name)) diff --git a/Solutions/MOHIDNumerics.7z b/Solutions/MOHIDNumerics.7z new file mode 100644 index 000000000..599d3ddab Binary files /dev/null and b/Solutions/MOHIDNumerics.7z differ diff --git a/Solutions/MOHIDNumerics/Compare2HDFfiles/Compare2HDFfiles.vfproj b/Solutions/MOHIDNumerics/Compare2HDFfiles/Compare2HDFfiles.vfproj new file mode 100644 index 000000000..4eeb40a42 --- /dev/null +++ b/Solutions/MOHIDNumerics/Compare2HDFfiles/Compare2HDFfiles.vfproj @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/MOHIDNumerics/Convert2Hdf5/Convert2Hdf5.vfproj b/Solutions/MOHIDNumerics/Convert2Hdf5/Convert2Hdf5.vfproj new file mode 100644 index 000000000..dd468134c --- /dev/null +++ b/Solutions/MOHIDNumerics/Convert2Hdf5/Convert2Hdf5.vfproj @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/MOHIDNumerics/Convert2netcdf/Convert2netcdf.vfproj b/Solutions/MOHIDNumerics/Convert2netcdf/Convert2netcdf.vfproj new file mode 100644 index 000000000..0589c3d0f --- /dev/null +++ b/Solutions/MOHIDNumerics/Convert2netcdf/Convert2netcdf.vfproj @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/MOHIDNumerics/ConvertGridDataToHDF5/ConvertGridDataToHDF5.vfproj b/Solutions/MOHIDNumerics/ConvertGridDataToHDF5/ConvertGridDataToHDF5.vfproj new file mode 100644 index 000000000..f914799fd --- /dev/null +++ b/Solutions/MOHIDNumerics/ConvertGridDataToHDF5/ConvertGridDataToHDF5.vfproj @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/MOHIDNumerics/ConvertToTimeSerie/ConvertToTimeSerie.vfproj b/Solutions/MOHIDNumerics/ConvertToTimeSerie/ConvertToTimeSerie.vfproj new file mode 100644 index 000000000..69dc9ef8b --- /dev/null +++ b/Solutions/MOHIDNumerics/ConvertToTimeSerie/ConvertToTimeSerie.vfproj @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/MOHIDNumerics/DDCParser/DDCParser.vfproj b/Solutions/MOHIDNumerics/DDCParser/DDCParser.vfproj new file mode 100644 index 000000000..938190836 --- /dev/null +++ b/Solutions/MOHIDNumerics/DDCParser/DDCParser.vfproj @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/MOHIDNumerics/DDCWorker/DDCWorker.vfproj b/Solutions/MOHIDNumerics/DDCWorker/DDCWorker.vfproj new file mode 100644 index 000000000..520d927c7 --- /dev/null +++ b/Solutions/MOHIDNumerics/DDCWorker/DDCWorker.vfproj @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/MOHIDNumerics/DigitalTerrainTool/DigitalTerrainTool.vfproj b/Solutions/MOHIDNumerics/DigitalTerrainTool/DigitalTerrainTool.vfproj new file mode 100644 index 000000000..f47719bb2 --- /dev/null +++ b/Solutions/MOHIDNumerics/DigitalTerrainTool/DigitalTerrainTool.vfproj @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/MOHIDNumerics/DomainConsolidation/DomainConsolidation.vfproj b/Solutions/MOHIDNumerics/DomainConsolidation/DomainConsolidation.vfproj new file mode 100644 index 000000000..5c70cfba4 --- /dev/null +++ b/Solutions/MOHIDNumerics/DomainConsolidation/DomainConsolidation.vfproj @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/MOHIDNumerics/FillMatrix/FillMatrix.vfproj b/Solutions/MOHIDNumerics/FillMatrix/FillMatrix.vfproj new file mode 100644 index 000000000..302039502 --- /dev/null +++ b/Solutions/MOHIDNumerics/FillMatrix/FillMatrix.vfproj @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/MOHIDNumerics/FilterBathymetry/FilterBathymetry.vfproj b/Solutions/MOHIDNumerics/FilterBathymetry/FilterBathymetry.vfproj new file mode 100644 index 000000000..2e1059e97 --- /dev/null +++ b/Solutions/MOHIDNumerics/FilterBathymetry/FilterBathymetry.vfproj @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/MOHIDNumerics/GlueWW3_OBC/GlueWW3_OBC.vfproj b/Solutions/MOHIDNumerics/GlueWW3_OBC/GlueWW3_OBC.vfproj new file mode 100644 index 000000000..03befb0be --- /dev/null +++ b/Solutions/MOHIDNumerics/GlueWW3_OBC/GlueWW3_OBC.vfproj @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/MOHIDNumerics/HDF5Exporter/HDF5Exporter.vfproj b/Solutions/MOHIDNumerics/HDF5Exporter/HDF5Exporter.vfproj new file mode 100644 index 000000000..b8464805f --- /dev/null +++ b/Solutions/MOHIDNumerics/HDF5Exporter/HDF5Exporter.vfproj @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/MOHIDNumerics/HDF5Extractor/HDF5Extractor.vfproj b/Solutions/MOHIDNumerics/HDF5Extractor/HDF5Extractor.vfproj new file mode 100644 index 000000000..176d7f576 --- /dev/null +++ b/Solutions/MOHIDNumerics/HDF5Extractor/HDF5Extractor.vfproj @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/MOHIDNumerics/HDF5Operator/HDF5Operator.vfproj b/Solutions/MOHIDNumerics/HDF5Operator/HDF5Operator.vfproj new file mode 100644 index 000000000..3f8c63c4f --- /dev/null +++ b/Solutions/MOHIDNumerics/HDF5Operator/HDF5Operator.vfproj @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/MOHIDNumerics/HDF5Statistics/HDF5Statistics.vfproj b/Solutions/MOHIDNumerics/HDF5Statistics/HDF5Statistics.vfproj new file mode 100644 index 000000000..38365595f --- /dev/null +++ b/Solutions/MOHIDNumerics/HDF5Statistics/HDF5Statistics.vfproj @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/MOHIDNumerics/HDF5_2_EsriGridData/HDF5_2_EsriGridData.vfproj b/Solutions/MOHIDNumerics/HDF5_2_EsriGridData/HDF5_2_EsriGridData.vfproj new file mode 100644 index 000000000..f68123bb3 --- /dev/null +++ b/Solutions/MOHIDNumerics/HDF5_2_EsriGridData/HDF5_2_EsriGridData.vfproj @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/MOHIDNumerics/HydrodynamicAnalyser/HydrodynamicAnalyser.vfproj b/Solutions/MOHIDNumerics/HydrodynamicAnalyser/HydrodynamicAnalyser.vfproj new file mode 100644 index 000000000..1c0ee502e --- /dev/null +++ b/Solutions/MOHIDNumerics/HydrodynamicAnalyser/HydrodynamicAnalyser.vfproj @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/MOHIDNumerics/JoinTimeSeries/JoinTimeSeries.vfproj b/Solutions/MOHIDNumerics/JoinTimeSeries/JoinTimeSeries.vfproj new file mode 100644 index 000000000..a6b26d342 --- /dev/null +++ b/Solutions/MOHIDNumerics/JoinTimeSeries/JoinTimeSeries.vfproj @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/MOHIDNumerics/MOHIDNumerics.sln b/Solutions/MOHIDNumerics/MOHIDNumerics.sln new file mode 100644 index 000000000..729bfbd6e --- /dev/null +++ b/Solutions/MOHIDNumerics/MOHIDNumerics.sln @@ -0,0 +1,1137 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25123.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "MohidWater", "MohidWater\MohidWater.vfproj", "{E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}" + ProjectSection(ProjectDependencies) = postProject + {5B9DC9D4-2641-4422-B6DC-988CA58D9323} = {5B9DC9D4-2641-4422-B6DC-988CA58D9323} + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} = {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} + EndProjectSection +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "MohidBase1", "MohidBase1\MohidBase1.vfproj", "{B186E0E8-1704-4EB0-A0C5-85AFB52A069C}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "MohidBase2", "MohidBase2\MohidBase2.vfproj", "{5B9DC9D4-2641-4422-B6DC-988CA58D9323}" + ProjectSection(ProjectDependencies) = postProject + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} = {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} + EndProjectSection +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "Convert2Hdf5", "Convert2Hdf5\Convert2Hdf5.vfproj", "{A6EDD202-5330-47B5-8E1E-5A98D14AD51A}" + ProjectSection(ProjectDependencies) = postProject + {5B9DC9D4-2641-4422-B6DC-988CA58D9323} = {5B9DC9D4-2641-4422-B6DC-988CA58D9323} + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} = {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} + EndProjectSection +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "HDF5Extractor", "HDF5Extractor\HDF5Extractor.vfproj", "{86CE3A10-4856-40B2-874F-85A47920FC61}" + ProjectSection(ProjectDependencies) = postProject + {5B9DC9D4-2641-4422-B6DC-988CA58D9323} = {5B9DC9D4-2641-4422-B6DC-988CA58D9323} + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} = {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} + EndProjectSection +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "Valida4D", "Valida4D\Valida4D.vfproj", "{4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}" + ProjectSection(ProjectDependencies) = postProject + {5B9DC9D4-2641-4422-B6DC-988CA58D9323} = {5B9DC9D4-2641-4422-B6DC-988CA58D9323} + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} = {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} + EndProjectSection +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "DigitalTerrainTool", "DigitalTerrainTool\DigitalTerrainTool.vfproj", "{A9AB71DE-AF36-43B8-8214-D1528881B036}" + ProjectSection(ProjectDependencies) = postProject + {5B9DC9D4-2641-4422-B6DC-988CA58D9323} = {5B9DC9D4-2641-4422-B6DC-988CA58D9323} + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} = {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} + EndProjectSection +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "DomainConsolidation", "DomainConsolidation\DomainConsolidation.vfproj", "{8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}" + ProjectSection(ProjectDependencies) = postProject + {5B9DC9D4-2641-4422-B6DC-988CA58D9323} = {5B9DC9D4-2641-4422-B6DC-988CA58D9323} + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} = {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} + EndProjectSection +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "TidePrev", "TidePrev\TidePrev.vfproj", "{F58FF19C-6A88-4D99-B587-E6B7752EC103}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "GlueWW3_OBC", "GlueWW3_OBC\GlueWW3_OBC.vfproj", "{8191DDA9-7477-48B2-BF5B-BA58EB81D76E}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "FilterBathymetry", "FilterBathymetry\FilterBathymetry.vfproj", "{8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}" + ProjectSection(ProjectDependencies) = postProject + {5B9DC9D4-2641-4422-B6DC-988CA58D9323} = {5B9DC9D4-2641-4422-B6DC-988CA58D9323} + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} = {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} + EndProjectSection +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "DDCParser", "DDCParser\DDCParser.vfproj", "{29BFD189-F22E-42FD-8E33-4E2436386EB1}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "DDCWorker", "DDCWorker\DDCWorker.vfproj", "{DC527F50-5495-4C75-99DF-82B2CBA215AF}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "hdf2surfer", "hdf2surfer\hdf2surfer.vfproj", "{C04384BB-3887-4EA3-A9B4-988A0C698396}" + ProjectSection(ProjectDependencies) = postProject + {5B9DC9D4-2641-4422-B6DC-988CA58D9323} = {5B9DC9D4-2641-4422-B6DC-988CA58D9323} + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} = {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} + EndProjectSection +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "HydrodynamicAnalyser", "HydrodynamicAnalyser\HydrodynamicAnalyser.vfproj", "{B500FAC8-4FC2-433A-8BBF-8D19837060FE}" + ProjectSection(ProjectDependencies) = postProject + {5B9DC9D4-2641-4422-B6DC-988CA58D9323} = {5B9DC9D4-2641-4422-B6DC-988CA58D9323} + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} = {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} + EndProjectSection +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "ConvertGridDataToHDF5", "ConvertGridDataToHDF5\ConvertGridDataToHDF5.vfproj", "{4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}" + ProjectSection(ProjectDependencies) = postProject + {5B9DC9D4-2641-4422-B6DC-988CA58D9323} = {5B9DC9D4-2641-4422-B6DC-988CA58D9323} + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} = {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} + EndProjectSection +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "HDF5Exporter", "HDF5Exporter\HDF5Exporter.vfproj", "{BCE54D78-EFF6-4492-86D3-E6EFB49E9083}" + ProjectSection(ProjectDependencies) = postProject + {5B9DC9D4-2641-4422-B6DC-988CA58D9323} = {5B9DC9D4-2641-4422-B6DC-988CA58D9323} + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} = {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} + EndProjectSection +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "Convert2netcdf", "Convert2netcdf\Convert2netcdf.vfproj", "{F8708A1A-EF60-4639-BD43-777C769C7864}" + ProjectSection(ProjectDependencies) = postProject + {5B9DC9D4-2641-4422-B6DC-988CA58D9323} = {5B9DC9D4-2641-4422-B6DC-988CA58D9323} + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} = {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} + EndProjectSection +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "MohidLand", "MohidLand\MohidLand.vfproj", "{2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}" + ProjectSection(ProjectDependencies) = postProject + {5B9DC9D4-2641-4422-B6DC-988CA58D9323} = {5B9DC9D4-2641-4422-B6DC-988CA58D9323} + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} = {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} + EndProjectSection +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "HDF5_2_EsriGridData", "HDF5_2_EsriGridData\HDF5_2_EsriGridData.vfproj", "{B893667E-A60D-4D7E-A1F6-E0D94E8815BB}" + ProjectSection(ProjectDependencies) = postProject + {5B9DC9D4-2641-4422-B6DC-988CA58D9323} = {5B9DC9D4-2641-4422-B6DC-988CA58D9323} + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} = {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} + EndProjectSection +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "HDF5Statistics", "HDF5Statistics\HDF5Statistics.vfproj", "{3A41D44C-F6DB-42B4-B98B-57252374202D}" + ProjectSection(ProjectDependencies) = postProject + {5B9DC9D4-2641-4422-B6DC-988CA58D9323} = {5B9DC9D4-2641-4422-B6DC-988CA58D9323} + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} = {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} + EndProjectSection +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "FillMatrix", "FillMatrix\FillMatrix.vfproj", "{4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}" + ProjectSection(ProjectDependencies) = postProject + {5B9DC9D4-2641-4422-B6DC-988CA58D9323} = {5B9DC9D4-2641-4422-B6DC-988CA58D9323} + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} = {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} + EndProjectSection +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "ConvertToTimeSerie", "ConvertToTimeSerie\ConvertToTimeSerie.vfproj", "{D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}" + ProjectSection(ProjectDependencies) = postProject + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} = {B186E0E8-1704-4EB0-A0C5-85AFB52A069C} + EndProjectSection +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "JoinTimeSeries", "JoinTimeSeries\JoinTimeSeries.vfproj", "{FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "Compare2HDFfiles", "Compare2HDFfiles\Compare2HDFfiles.vfproj", "{A2362933-01EF-4E31-914B-C4316A54E065}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "HDF5Operator", "HDF5Operator\HDF5Operator.vfproj", "{31718428-0170-4952-924F-1568E2FA72EF}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug MPI|Any CPU = Debug MPI|Any CPU + Debug MPI|Mixed Platforms = Debug MPI|Mixed Platforms + Debug MPI|Win32 = Debug MPI|Win32 + Debug MPI|x64 = Debug MPI|x64 + Debug OpenMP|Any CPU = Debug OpenMP|Any CPU + Debug OpenMP|Mixed Platforms = Debug OpenMP|Mixed Platforms + Debug OpenMP|Win32 = Debug OpenMP|Win32 + Debug OpenMP|x64 = Debug OpenMP|x64 + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release MPI|Any CPU = Release MPI|Any CPU + Release MPI|Mixed Platforms = Release MPI|Mixed Platforms + Release MPI|Win32 = Release MPI|Win32 + Release MPI|x64 = Release MPI|x64 + Release OpenMP|Any CPU = Release OpenMP|Any CPU + Release OpenMP|Mixed Platforms = Release OpenMP|Mixed Platforms + Release OpenMP|Win32 = Release OpenMP|Win32 + Release OpenMP|x64 = Release OpenMP|x64 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Debug MPI|Any CPU.ActiveCfg = Debug MPI|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Debug MPI|Mixed Platforms.ActiveCfg = Debug MPI|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Debug MPI|Mixed Platforms.Build.0 = Debug MPI|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Debug MPI|Win32.ActiveCfg = Debug MPI|Win32 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Debug MPI|Win32.Build.0 = Debug MPI|Win32 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Debug MPI|x64.ActiveCfg = Debug MPI|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Debug MPI|x64.Build.0 = Debug MPI|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Debug OpenMP|Any CPU.ActiveCfg = Debug OpenMP|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Debug OpenMP|Mixed Platforms.ActiveCfg = Debug OpenMP|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Debug OpenMP|Mixed Platforms.Build.0 = Debug OpenMP|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Debug OpenMP|Win32.ActiveCfg = Debug OpenMP|Win32 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Debug OpenMP|Win32.Build.0 = Debug OpenMP|Win32 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Debug OpenMP|x64.ActiveCfg = Debug OpenMP|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Debug OpenMP|x64.Build.0 = Debug OpenMP|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Debug|Any CPU.ActiveCfg = Debug|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Debug|Win32.ActiveCfg = Debug|Win32 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Debug|Win32.Build.0 = Debug|Win32 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Debug|x64.ActiveCfg = Debug|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Debug|x64.Build.0 = Debug|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Release MPI|Any CPU.ActiveCfg = Release MPI|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Release MPI|Mixed Platforms.ActiveCfg = Release MPI|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Release MPI|Mixed Platforms.Build.0 = Release MPI|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Release MPI|Win32.ActiveCfg = Release MPI|Win32 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Release MPI|Win32.Build.0 = Release MPI|Win32 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Release MPI|x64.ActiveCfg = Release MPI|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Release MPI|x64.Build.0 = Release MPI|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Release OpenMP|Any CPU.ActiveCfg = Release OpenMP|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Release OpenMP|Mixed Platforms.ActiveCfg = Release OpenMP|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Release OpenMP|Mixed Platforms.Build.0 = Release OpenMP|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Release OpenMP|Win32.ActiveCfg = Release OpenMP|Win32 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Release OpenMP|Win32.Build.0 = Release OpenMP|Win32 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Release OpenMP|x64.ActiveCfg = Release OpenMP|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Release OpenMP|x64.Build.0 = Release OpenMP|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Release|Any CPU.ActiveCfg = Release|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Release|Mixed Platforms.Build.0 = Release|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Release|Win32.ActiveCfg = Release|Win32 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Release|Win32.Build.0 = Release|Win32 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Release|x64.ActiveCfg = Release|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Release|x64.Build.0 = Release|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Debug MPI|Any CPU.ActiveCfg = Debug MPI|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Debug MPI|Mixed Platforms.ActiveCfg = Debug MPI|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Debug MPI|Mixed Platforms.Build.0 = Debug MPI|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Debug MPI|Win32.ActiveCfg = Debug MPI|Win32 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Debug MPI|Win32.Build.0 = Debug MPI|Win32 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Debug MPI|x64.ActiveCfg = Debug MPI|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Debug MPI|x64.Build.0 = Debug MPI|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Debug OpenMP|Any CPU.ActiveCfg = Debug MPI|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Debug OpenMP|Mixed Platforms.ActiveCfg = Debug MPI|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Debug OpenMP|Mixed Platforms.Build.0 = Debug MPI|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Debug OpenMP|Win32.ActiveCfg = Debug MPI|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Debug OpenMP|x64.ActiveCfg = Debug|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Debug OpenMP|x64.Build.0 = Debug|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Debug|Any CPU.ActiveCfg = Debug|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Debug|Win32.ActiveCfg = Debug|Win32 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Debug|Win32.Build.0 = Debug|Win32 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Debug|x64.ActiveCfg = Debug|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Debug|x64.Build.0 = Debug|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Release MPI|Any CPU.ActiveCfg = Release MPI|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Release MPI|Mixed Platforms.ActiveCfg = Release MPI|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Release MPI|Mixed Platforms.Build.0 = Release MPI|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Release MPI|Win32.ActiveCfg = Release MPI|Win32 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Release MPI|Win32.Build.0 = Release MPI|Win32 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Release MPI|x64.ActiveCfg = Release MPI|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Release MPI|x64.Build.0 = Release MPI|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Release OpenMP|Any CPU.ActiveCfg = Release OpenMP|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Release OpenMP|Mixed Platforms.ActiveCfg = Release OpenMP|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Release OpenMP|Mixed Platforms.Build.0 = Release OpenMP|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Release OpenMP|Win32.ActiveCfg = Release OpenMP|Win32 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Release OpenMP|Win32.Build.0 = Release OpenMP|Win32 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Release OpenMP|x64.ActiveCfg = Release OpenMP|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Release OpenMP|x64.Build.0 = Release OpenMP|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Release|Any CPU.ActiveCfg = Release|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Release|Mixed Platforms.Build.0 = Release|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Release|Win32.ActiveCfg = Release|Win32 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Release|Win32.Build.0 = Release|Win32 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Release|x64.ActiveCfg = Release|x64 + {B186E0E8-1704-4EB0-A0C5-85AFB52A069C}.Release|x64.Build.0 = Release|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Debug MPI|Any CPU.ActiveCfg = Debug MPI|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Debug MPI|Mixed Platforms.ActiveCfg = Debug MPI|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Debug MPI|Mixed Platforms.Build.0 = Debug MPI|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Debug MPI|Win32.ActiveCfg = Debug MPI|Win32 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Debug MPI|Win32.Build.0 = Debug MPI|Win32 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Debug MPI|x64.ActiveCfg = Debug MPI|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Debug MPI|x64.Build.0 = Debug MPI|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Debug OpenMP|Any CPU.ActiveCfg = Debug MPI|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Debug OpenMP|Mixed Platforms.ActiveCfg = Debug MPI|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Debug OpenMP|Mixed Platforms.Build.0 = Debug MPI|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Debug OpenMP|Win32.ActiveCfg = Debug MPI|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Debug OpenMP|x64.ActiveCfg = Debug|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Debug OpenMP|x64.Build.0 = Debug|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Debug|Any CPU.ActiveCfg = Debug|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Debug|Win32.ActiveCfg = Debug|Win32 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Debug|Win32.Build.0 = Debug|Win32 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Debug|x64.ActiveCfg = Debug|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Debug|x64.Build.0 = Debug|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Release MPI|Any CPU.ActiveCfg = Release MPI|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Release MPI|Mixed Platforms.ActiveCfg = Release MPI|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Release MPI|Mixed Platforms.Build.0 = Release MPI|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Release MPI|Win32.ActiveCfg = Release MPI|Win32 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Release MPI|Win32.Build.0 = Release MPI|Win32 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Release MPI|x64.ActiveCfg = Release MPI|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Release MPI|x64.Build.0 = Release MPI|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Release OpenMP|Any CPU.ActiveCfg = Release OpenMP|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Release OpenMP|Mixed Platforms.ActiveCfg = Release OpenMP|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Release OpenMP|Mixed Platforms.Build.0 = Release OpenMP|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Release OpenMP|Win32.ActiveCfg = Release OpenMP|Win32 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Release OpenMP|Win32.Build.0 = Release OpenMP|Win32 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Release OpenMP|x64.ActiveCfg = Release OpenMP|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Release OpenMP|x64.Build.0 = Release OpenMP|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Release|Any CPU.ActiveCfg = Release|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Release|Mixed Platforms.Build.0 = Release|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Release|Win32.ActiveCfg = Release|Win32 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Release|Win32.Build.0 = Release|Win32 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Release|x64.ActiveCfg = Release|x64 + {5B9DC9D4-2641-4422-B6DC-988CA58D9323}.Release|x64.Build.0 = Release|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Debug MPI|Any CPU.ActiveCfg = Debug MPI|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Debug MPI|Mixed Platforms.ActiveCfg = Debug MPI|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Debug MPI|Mixed Platforms.Build.0 = Debug MPI|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Debug MPI|Win32.ActiveCfg = Debug MPI|Win32 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Debug MPI|Win32.Build.0 = Debug MPI|Win32 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Debug MPI|x64.ActiveCfg = Debug MPI|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Debug MPI|x64.Build.0 = Debug MPI|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Debug OpenMP|Any CPU.ActiveCfg = Debug MPI|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Debug OpenMP|Mixed Platforms.ActiveCfg = Debug MPI|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Debug OpenMP|Mixed Platforms.Build.0 = Debug MPI|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Debug OpenMP|Win32.ActiveCfg = Debug MPI|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Debug OpenMP|x64.ActiveCfg = Debug MPI|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Debug OpenMP|x64.Build.0 = Debug MPI|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Debug|Any CPU.ActiveCfg = Debug|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Debug|Win32.ActiveCfg = Debug|Win32 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Debug|Win32.Build.0 = Debug|Win32 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Debug|x64.ActiveCfg = Debug|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Debug|x64.Build.0 = Debug|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Release MPI|Any CPU.ActiveCfg = Release MPI|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Release MPI|Mixed Platforms.ActiveCfg = Release MPI|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Release MPI|Mixed Platforms.Build.0 = Release MPI|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Release MPI|Win32.ActiveCfg = Release MPI|Win32 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Release MPI|x64.ActiveCfg = Release MPI|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Release OpenMP|Any CPU.ActiveCfg = Release MPI|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Release OpenMP|Mixed Platforms.ActiveCfg = Release MPI|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Release OpenMP|Mixed Platforms.Build.0 = Release MPI|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Release OpenMP|Win32.ActiveCfg = Release|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Release OpenMP|x64.ActiveCfg = Release|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Release|Any CPU.ActiveCfg = Release|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Release|Mixed Platforms.Build.0 = Release|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Release|Win32.ActiveCfg = Release|Win32 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Release|Win32.Build.0 = Release|Win32 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Release|x64.ActiveCfg = Release|x64 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Debug MPI|Any CPU.ActiveCfg = Debug MPI|x64 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Debug MPI|Mixed Platforms.ActiveCfg = Debug MPI|x64 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Debug MPI|Mixed Platforms.Build.0 = Debug MPI|x64 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Debug MPI|Win32.ActiveCfg = Debug MPI|Win32 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Debug MPI|x64.ActiveCfg = Debug MPI|x64 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Debug OpenMP|Any CPU.ActiveCfg = Debug MPI|x64 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Debug OpenMP|Mixed Platforms.ActiveCfg = Debug MPI|x64 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Debug OpenMP|Mixed Platforms.Build.0 = Debug MPI|x64 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Debug OpenMP|Win32.ActiveCfg = Debug MPI|x64 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Debug OpenMP|x64.ActiveCfg = Debug MPI|x64 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Debug OpenMP|x64.Build.0 = Debug MPI|x64 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Debug|Any CPU.ActiveCfg = Debug|x64 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Debug|Win32.ActiveCfg = Debug|Win32 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Debug|Win32.Build.0 = Debug|Win32 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Debug|x64.ActiveCfg = Debug|x64 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Release MPI|Any CPU.ActiveCfg = Release MPI|x64 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Release MPI|Mixed Platforms.ActiveCfg = Release MPI|x64 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Release MPI|Mixed Platforms.Build.0 = Release MPI|x64 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Release MPI|Win32.ActiveCfg = Release MPI|Win32 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Release MPI|x64.ActiveCfg = Release MPI|x64 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Release OpenMP|Any CPU.ActiveCfg = Release MPI|x64 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Release OpenMP|Mixed Platforms.ActiveCfg = Release MPI|x64 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Release OpenMP|Mixed Platforms.Build.0 = Release MPI|x64 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Release OpenMP|Win32.ActiveCfg = Release|Win32 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Release OpenMP|Win32.Build.0 = Release|Win32 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Release OpenMP|x64.ActiveCfg = Release|Win32 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Release|Any CPU.ActiveCfg = Release|x64 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Release|Mixed Platforms.Build.0 = Release|x64 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Release|Win32.ActiveCfg = Release|Win32 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Release|Win32.Build.0 = Release|Win32 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Release|x64.ActiveCfg = Release|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Debug MPI|Any CPU.ActiveCfg = Debug MPI|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Debug MPI|Mixed Platforms.ActiveCfg = Debug MPI|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Debug MPI|Mixed Platforms.Build.0 = Debug MPI|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Debug MPI|Win32.ActiveCfg = Debug MPI|Win32 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Debug MPI|x64.ActiveCfg = Debug MPI|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Debug OpenMP|Any CPU.ActiveCfg = Debug MPI|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Debug OpenMP|Mixed Platforms.ActiveCfg = Debug MPI|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Debug OpenMP|Mixed Platforms.Build.0 = Debug MPI|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Debug OpenMP|Win32.ActiveCfg = Debug MPI|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Debug OpenMP|x64.ActiveCfg = Debug MPI|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Debug OpenMP|x64.Build.0 = Debug MPI|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Debug|Any CPU.ActiveCfg = Debug|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Debug|Win32.ActiveCfg = Debug|Win32 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Debug|Win32.Build.0 = Debug|Win32 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Debug|x64.ActiveCfg = Debug|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Release MPI|Any CPU.ActiveCfg = Release MPI|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Release MPI|Mixed Platforms.ActiveCfg = Release MPI|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Release MPI|Mixed Platforms.Build.0 = Release MPI|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Release MPI|Win32.ActiveCfg = Release MPI|Win32 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Release MPI|x64.ActiveCfg = Release MPI|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Release OpenMP|Any CPU.ActiveCfg = Release MPI|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Release OpenMP|Mixed Platforms.ActiveCfg = Release MPI|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Release OpenMP|Mixed Platforms.Build.0 = Release MPI|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Release OpenMP|Win32.ActiveCfg = Release|Win32 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Release OpenMP|Win32.Build.0 = Release|Win32 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Release OpenMP|x64.ActiveCfg = Release|Win32 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Release|Any CPU.ActiveCfg = Release|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Release|Mixed Platforms.Build.0 = Release|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Release|Win32.ActiveCfg = Release|Win32 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Release|Win32.Build.0 = Release|Win32 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Release|x64.ActiveCfg = Release|x64 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Debug MPI|Any CPU.ActiveCfg = Debug MPI|x64 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Debug MPI|Mixed Platforms.ActiveCfg = Debug MPI|x64 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Debug MPI|Mixed Platforms.Build.0 = Debug MPI|x64 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Debug MPI|Win32.ActiveCfg = Debug MPI|Win32 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Debug MPI|x64.ActiveCfg = Debug MPI|x64 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Debug OpenMP|Any CPU.ActiveCfg = Debug MPI|x64 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Debug OpenMP|Mixed Platforms.ActiveCfg = Debug MPI|x64 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Debug OpenMP|Mixed Platforms.Build.0 = Debug MPI|x64 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Debug OpenMP|Win32.ActiveCfg = Debug MPI|x64 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Debug OpenMP|x64.ActiveCfg = Debug MPI|x64 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Debug OpenMP|x64.Build.0 = Debug MPI|x64 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Debug|Any CPU.ActiveCfg = Debug|x64 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Debug|Win32.ActiveCfg = Debug|Win32 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Debug|Win32.Build.0 = Debug|Win32 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Debug|x64.ActiveCfg = Debug|x64 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Release MPI|Any CPU.ActiveCfg = Release MPI|x64 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Release MPI|Mixed Platforms.ActiveCfg = Release MPI|x64 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Release MPI|Mixed Platforms.Build.0 = Release MPI|x64 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Release MPI|Win32.ActiveCfg = Release MPI|Win32 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Release MPI|Win32.Build.0 = Release MPI|Win32 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Release MPI|x64.ActiveCfg = Release MPI|x64 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Release MPI|x64.Build.0 = Release MPI|x64 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Release OpenMP|Any CPU.ActiveCfg = Release MPI|x64 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Release OpenMP|Mixed Platforms.ActiveCfg = Release MPI|x64 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Release OpenMP|Mixed Platforms.Build.0 = Release MPI|x64 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Release OpenMP|Win32.ActiveCfg = Release|Win32 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Release OpenMP|Win32.Build.0 = Release|Win32 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Release OpenMP|x64.ActiveCfg = Release|Win32 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Release|Any CPU.ActiveCfg = Release|x64 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Release|Mixed Platforms.Build.0 = Release|x64 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Release|Win32.ActiveCfg = Release|Win32 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Release|Win32.Build.0 = Release|Win32 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Release|x64.ActiveCfg = Release|x64 + {A9AB71DE-AF36-43B8-8214-D1528881B036}.Release|x64.Build.0 = Release|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Debug MPI|Any CPU.ActiveCfg = Debug MPI|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Debug MPI|Mixed Platforms.ActiveCfg = Debug MPI|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Debug MPI|Mixed Platforms.Build.0 = Debug MPI|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Debug MPI|Win32.ActiveCfg = Debug MPI|Win32 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Debug MPI|x64.ActiveCfg = Debug MPI|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Debug OpenMP|Any CPU.ActiveCfg = Debug MPI|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Debug OpenMP|Mixed Platforms.ActiveCfg = Debug MPI|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Debug OpenMP|Mixed Platforms.Build.0 = Debug MPI|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Debug OpenMP|Win32.ActiveCfg = Debug MPI|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Debug OpenMP|x64.ActiveCfg = Debug MPI|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Debug OpenMP|x64.Build.0 = Debug MPI|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Debug|Any CPU.ActiveCfg = Debug|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Debug|Win32.ActiveCfg = Debug|Win32 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Debug|Win32.Build.0 = Debug|Win32 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Debug|x64.ActiveCfg = Debug|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Release MPI|Any CPU.ActiveCfg = Release MPI|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Release MPI|Mixed Platforms.ActiveCfg = Release MPI|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Release MPI|Mixed Platforms.Build.0 = Release MPI|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Release MPI|Win32.ActiveCfg = Release MPI|Win32 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Release MPI|x64.ActiveCfg = Release MPI|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Release OpenMP|Any CPU.ActiveCfg = Release MPI|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Release OpenMP|Mixed Platforms.ActiveCfg = Release MPI|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Release OpenMP|Mixed Platforms.Build.0 = Release MPI|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Release OpenMP|Win32.ActiveCfg = Release|Win32 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Release OpenMP|Win32.Build.0 = Release|Win32 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Release OpenMP|x64.ActiveCfg = Release|Win32 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Release|Any CPU.ActiveCfg = Release|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Release|Mixed Platforms.Build.0 = Release|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Release|Win32.ActiveCfg = Release|Win32 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Release|Win32.Build.0 = Release|Win32 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Release|x64.ActiveCfg = Release|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Debug MPI|Any CPU.ActiveCfg = Debug MPI|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Debug MPI|Mixed Platforms.ActiveCfg = Debug MPI|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Debug MPI|Mixed Platforms.Build.0 = Debug MPI|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Debug MPI|Win32.ActiveCfg = Debug MPI|Win32 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Debug MPI|x64.ActiveCfg = Debug MPI|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Debug OpenMP|Any CPU.ActiveCfg = Debug MPI|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Debug OpenMP|Mixed Platforms.ActiveCfg = Debug MPI|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Debug OpenMP|Mixed Platforms.Build.0 = Debug MPI|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Debug OpenMP|Win32.ActiveCfg = Debug MPI|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Debug OpenMP|x64.ActiveCfg = Debug MPI|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Debug OpenMP|x64.Build.0 = Debug MPI|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Debug|Any CPU.ActiveCfg = Debug|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Debug|Win32.ActiveCfg = Debug|Win32 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Debug|Win32.Build.0 = Debug|Win32 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Debug|x64.ActiveCfg = Debug|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Release MPI|Any CPU.ActiveCfg = Release MPI|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Release MPI|Mixed Platforms.ActiveCfg = Release MPI|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Release MPI|Mixed Platforms.Build.0 = Release MPI|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Release MPI|Win32.ActiveCfg = Release MPI|Win32 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Release MPI|x64.ActiveCfg = Release MPI|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Release OpenMP|Any CPU.ActiveCfg = Release MPI|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Release OpenMP|Mixed Platforms.ActiveCfg = Release MPI|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Release OpenMP|Mixed Platforms.Build.0 = Release MPI|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Release OpenMP|Win32.ActiveCfg = Release|Win32 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Release OpenMP|Win32.Build.0 = Release|Win32 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Release OpenMP|x64.ActiveCfg = Release|Win32 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Release|Any CPU.ActiveCfg = Release|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Release|Mixed Platforms.Build.0 = Release|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Release|Win32.ActiveCfg = Release|Win32 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Release|Win32.Build.0 = Release|Win32 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Release|x64.ActiveCfg = Release|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Debug MPI|Any CPU.ActiveCfg = Debug MPI|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Debug MPI|Mixed Platforms.ActiveCfg = Debug MPI|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Debug MPI|Mixed Platforms.Build.0 = Debug MPI|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Debug MPI|Win32.ActiveCfg = Debug MPI|Win32 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Debug MPI|Win32.Build.0 = Debug MPI|Win32 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Debug MPI|x64.ActiveCfg = Debug MPI|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Debug MPI|x64.Build.0 = Debug MPI|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Debug OpenMP|Any CPU.ActiveCfg = Debug MPI|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Debug OpenMP|Mixed Platforms.ActiveCfg = Debug MPI|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Debug OpenMP|Mixed Platforms.Build.0 = Debug MPI|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Debug OpenMP|Win32.ActiveCfg = Debug MPI|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Debug OpenMP|x64.ActiveCfg = Debug MPI|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Debug OpenMP|x64.Build.0 = Debug MPI|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Debug|Any CPU.ActiveCfg = Debug|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Debug|Win32.ActiveCfg = Debug|Win32 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Debug|Win32.Build.0 = Debug|Win32 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Debug|x64.ActiveCfg = Debug|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Debug|x64.Build.0 = Debug|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Release MPI|Any CPU.ActiveCfg = Release MPI|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Release MPI|Mixed Platforms.ActiveCfg = Release MPI|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Release MPI|Mixed Platforms.Build.0 = Release MPI|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Release MPI|Win32.ActiveCfg = Release MPI|Win32 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Release MPI|x64.ActiveCfg = Release MPI|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Release OpenMP|Any CPU.ActiveCfg = Release MPI|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Release OpenMP|Mixed Platforms.ActiveCfg = Release MPI|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Release OpenMP|Mixed Platforms.Build.0 = Release MPI|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Release OpenMP|Win32.ActiveCfg = Release|Win32 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Release OpenMP|Win32.Build.0 = Release|Win32 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Release OpenMP|x64.ActiveCfg = Release|Win32 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Release|Any CPU.ActiveCfg = Release|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Release|Mixed Platforms.Build.0 = Release|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Release|Win32.ActiveCfg = Release|Win32 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Release|Win32.Build.0 = Release|Win32 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Release|x64.ActiveCfg = Release|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Debug MPI|Any CPU.ActiveCfg = Debug MPI|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Debug MPI|Mixed Platforms.ActiveCfg = Debug MPI|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Debug MPI|Mixed Platforms.Build.0 = Debug MPI|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Debug MPI|Win32.ActiveCfg = Debug MPI|Win32 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Debug MPI|x64.ActiveCfg = Debug MPI|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Debug OpenMP|Any CPU.ActiveCfg = Debug MPI|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Debug OpenMP|Mixed Platforms.ActiveCfg = Debug MPI|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Debug OpenMP|Mixed Platforms.Build.0 = Debug MPI|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Debug OpenMP|Win32.ActiveCfg = Debug MPI|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Debug OpenMP|x64.ActiveCfg = Debug MPI|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Debug OpenMP|x64.Build.0 = Debug MPI|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Debug|Any CPU.ActiveCfg = Debug|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Debug|Win32.ActiveCfg = Debug|Win32 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Debug|Win32.Build.0 = Debug|Win32 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Debug|x64.ActiveCfg = Debug|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Release MPI|Any CPU.ActiveCfg = Release MPI|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Release MPI|Mixed Platforms.ActiveCfg = Release MPI|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Release MPI|Mixed Platforms.Build.0 = Release MPI|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Release MPI|Win32.ActiveCfg = Release MPI|Win32 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Release MPI|x64.ActiveCfg = Release MPI|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Release OpenMP|Any CPU.ActiveCfg = Release MPI|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Release OpenMP|Mixed Platforms.ActiveCfg = Release MPI|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Release OpenMP|Mixed Platforms.Build.0 = Release MPI|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Release OpenMP|Win32.ActiveCfg = Release|Win32 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Release OpenMP|Win32.Build.0 = Release|Win32 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Release OpenMP|x64.ActiveCfg = Release|Win32 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Release|Any CPU.ActiveCfg = Release|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Release|Mixed Platforms.Build.0 = Release|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Release|Win32.ActiveCfg = Release|Win32 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Release|Win32.Build.0 = Release|Win32 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Release|x64.ActiveCfg = Release|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Debug MPI|Any CPU.ActiveCfg = Debug|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Debug MPI|Mixed Platforms.ActiveCfg = Debug|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Debug MPI|Mixed Platforms.Build.0 = Debug|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Debug MPI|Win32.ActiveCfg = Debug|Win32 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Debug MPI|Win32.Build.0 = Debug|Win32 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Debug MPI|x64.ActiveCfg = Debug|Win32 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Debug OpenMP|Any CPU.ActiveCfg = Debug|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Debug OpenMP|Mixed Platforms.ActiveCfg = Debug|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Debug OpenMP|Mixed Platforms.Build.0 = Debug|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Debug OpenMP|Win32.ActiveCfg = Debug|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Debug OpenMP|x64.ActiveCfg = Debug|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Debug OpenMP|x64.Build.0 = Debug|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Debug|Any CPU.ActiveCfg = Debug|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Debug|Win32.ActiveCfg = Debug|Win32 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Debug|Win32.Build.0 = Debug|Win32 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Debug|x64.ActiveCfg = Debug|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Release MPI|Any CPU.ActiveCfg = Release|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Release MPI|Mixed Platforms.ActiveCfg = Release|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Release MPI|Mixed Platforms.Build.0 = Release|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Release MPI|Win32.ActiveCfg = Release|Win32 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Release MPI|Win32.Build.0 = Release|Win32 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Release MPI|x64.ActiveCfg = Release|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Release MPI|x64.Build.0 = Release|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Release OpenMP|Any CPU.ActiveCfg = Release|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Release OpenMP|Mixed Platforms.ActiveCfg = Release|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Release OpenMP|Mixed Platforms.Build.0 = Release|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Release OpenMP|Win32.ActiveCfg = Release|Win32 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Release OpenMP|Win32.Build.0 = Release|Win32 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Release OpenMP|x64.ActiveCfg = Release|Win32 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Release|Any CPU.ActiveCfg = Release|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Release|Mixed Platforms.Build.0 = Release|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Release|Win32.ActiveCfg = Release|Win32 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Release|Win32.Build.0 = Release|Win32 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Release|x64.ActiveCfg = Release|x64 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Debug MPI|Any CPU.ActiveCfg = Debug|x64 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Debug MPI|Mixed Platforms.ActiveCfg = Debug|x64 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Debug MPI|Mixed Platforms.Build.0 = Debug|x64 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Debug MPI|Win32.ActiveCfg = Debug|Win32 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Debug MPI|Win32.Build.0 = Debug|Win32 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Debug MPI|x64.ActiveCfg = Debug|Win32 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Debug OpenMP|Any CPU.ActiveCfg = Debug|x64 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Debug OpenMP|Mixed Platforms.ActiveCfg = Debug|x64 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Debug OpenMP|Mixed Platforms.Build.0 = Debug|x64 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Debug OpenMP|Win32.ActiveCfg = Debug|x64 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Debug OpenMP|x64.ActiveCfg = Debug|x64 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Debug OpenMP|x64.Build.0 = Debug|x64 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Debug|Any CPU.ActiveCfg = Debug|x64 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Debug|Win32.ActiveCfg = Debug|Win32 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Debug|Win32.Build.0 = Debug|Win32 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Debug|x64.ActiveCfg = Debug|x64 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Release MPI|Any CPU.ActiveCfg = Release|x64 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Release MPI|Mixed Platforms.ActiveCfg = Release|x64 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Release MPI|Mixed Platforms.Build.0 = Release|x64 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Release MPI|Win32.ActiveCfg = Release|Win32 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Release MPI|Win32.Build.0 = Release|Win32 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Release MPI|x64.ActiveCfg = Release|x64 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Release OpenMP|Any CPU.ActiveCfg = Release|x64 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Release OpenMP|Mixed Platforms.ActiveCfg = Release|x64 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Release OpenMP|Mixed Platforms.Build.0 = Release|x64 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Release OpenMP|Win32.ActiveCfg = Release|Win32 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Release OpenMP|Win32.Build.0 = Release|Win32 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Release OpenMP|x64.ActiveCfg = Release|Win32 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Release|Any CPU.ActiveCfg = Release|x64 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Release|Mixed Platforms.Build.0 = Release|x64 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Release|Win32.ActiveCfg = Release|Win32 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Release|Win32.Build.0 = Release|Win32 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Release|x64.ActiveCfg = Release|x64 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Debug MPI|Any CPU.ActiveCfg = Debug|x64 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Debug MPI|Mixed Platforms.ActiveCfg = Debug|x64 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Debug MPI|Mixed Platforms.Build.0 = Debug|x64 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Debug MPI|Win32.ActiveCfg = Debug|Win32 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Debug MPI|Win32.Build.0 = Debug|Win32 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Debug MPI|x64.ActiveCfg = Debug|Win32 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Debug OpenMP|Any CPU.ActiveCfg = Debug|x64 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Debug OpenMP|Mixed Platforms.ActiveCfg = Debug|x64 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Debug OpenMP|Mixed Platforms.Build.0 = Debug|x64 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Debug OpenMP|Win32.ActiveCfg = Debug|x64 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Debug OpenMP|x64.ActiveCfg = Debug|x64 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Debug OpenMP|x64.Build.0 = Debug|x64 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Debug|Any CPU.ActiveCfg = Debug|x64 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Debug|Win32.ActiveCfg = Debug|Win32 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Debug|Win32.Build.0 = Debug|Win32 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Debug|x64.ActiveCfg = Debug|x64 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Release MPI|Any CPU.ActiveCfg = Release|x64 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Release MPI|Mixed Platforms.ActiveCfg = Release|x64 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Release MPI|Mixed Platforms.Build.0 = Release|x64 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Release MPI|Win32.ActiveCfg = Release|Win32 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Release MPI|Win32.Build.0 = Release|Win32 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Release MPI|x64.ActiveCfg = Release|Win32 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Release OpenMP|Any CPU.ActiveCfg = Release|x64 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Release OpenMP|Mixed Platforms.ActiveCfg = Release|x64 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Release OpenMP|Mixed Platforms.Build.0 = Release|x64 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Release OpenMP|Win32.ActiveCfg = Release|Win32 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Release OpenMP|Win32.Build.0 = Release|Win32 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Release OpenMP|x64.ActiveCfg = Release|Win32 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Release|Any CPU.ActiveCfg = Release|x64 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Release|Mixed Platforms.Build.0 = Release|x64 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Release|Win32.ActiveCfg = Release|Win32 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Release|Win32.Build.0 = Release|Win32 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Release|x64.ActiveCfg = Release|x64 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Debug MPI|Any CPU.ActiveCfg = Debug|x64 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Debug MPI|Mixed Platforms.ActiveCfg = Debug|x64 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Debug MPI|Mixed Platforms.Build.0 = Debug|x64 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Debug MPI|Win32.ActiveCfg = Debug|Win32 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Debug MPI|Win32.Build.0 = Debug|Win32 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Debug MPI|x64.ActiveCfg = Debug|Win32 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Debug OpenMP|Any CPU.ActiveCfg = Debug|x64 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Debug OpenMP|Mixed Platforms.ActiveCfg = Debug|x64 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Debug OpenMP|Mixed Platforms.Build.0 = Debug|x64 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Debug OpenMP|Win32.ActiveCfg = Debug|x64 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Debug OpenMP|x64.ActiveCfg = Debug|x64 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Debug OpenMP|x64.Build.0 = Debug|x64 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Debug|Any CPU.ActiveCfg = Debug|x64 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Debug|Win32.ActiveCfg = Debug|Win32 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Debug|Win32.Build.0 = Debug|Win32 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Debug|x64.ActiveCfg = Debug|x64 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Release MPI|Any CPU.ActiveCfg = Release|x64 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Release MPI|Mixed Platforms.ActiveCfg = Release|x64 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Release MPI|Mixed Platforms.Build.0 = Release|x64 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Release MPI|Win32.ActiveCfg = Release|Win32 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Release MPI|Win32.Build.0 = Release|Win32 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Release MPI|x64.ActiveCfg = Release|Win32 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Release OpenMP|Any CPU.ActiveCfg = Release|x64 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Release OpenMP|Mixed Platforms.ActiveCfg = Release|x64 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Release OpenMP|Mixed Platforms.Build.0 = Release|x64 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Release OpenMP|Win32.ActiveCfg = Release|Win32 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Release OpenMP|Win32.Build.0 = Release|Win32 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Release OpenMP|x64.ActiveCfg = Release|Win32 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Release|Any CPU.ActiveCfg = Release|x64 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Release|Mixed Platforms.Build.0 = Release|x64 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Release|Win32.ActiveCfg = Release|Win32 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Release|Win32.Build.0 = Release|Win32 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Release|x64.ActiveCfg = Release|x64 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Release|x64.Build.0 = Release|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Debug MPI|Any CPU.ActiveCfg = Debug|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Debug MPI|Mixed Platforms.ActiveCfg = Debug|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Debug MPI|Mixed Platforms.Build.0 = Debug|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Debug MPI|Win32.ActiveCfg = Debug|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Debug MPI|x64.ActiveCfg = Debug|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Debug MPI|x64.Build.0 = Debug|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Debug OpenMP|Any CPU.ActiveCfg = Debug|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Debug OpenMP|Mixed Platforms.ActiveCfg = Debug|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Debug OpenMP|Mixed Platforms.Build.0 = Debug|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Debug OpenMP|Win32.ActiveCfg = Debug|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Debug OpenMP|x64.ActiveCfg = Debug|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Debug OpenMP|x64.Build.0 = Debug|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Debug|Any CPU.ActiveCfg = Debug|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Debug|Win32.ActiveCfg = Debug|Win32 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Debug|Win32.Build.0 = Debug|Win32 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Debug|x64.ActiveCfg = Debug|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Debug|x64.Build.0 = Debug|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Release MPI|Any CPU.ActiveCfg = Release|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Release MPI|Mixed Platforms.ActiveCfg = Release|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Release MPI|Mixed Platforms.Build.0 = Release|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Release MPI|Win32.ActiveCfg = Release|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Release MPI|x64.ActiveCfg = Release|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Release MPI|x64.Build.0 = Release|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Release OpenMP|Any CPU.ActiveCfg = Release|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Release OpenMP|Mixed Platforms.ActiveCfg = Release|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Release OpenMP|Mixed Platforms.Build.0 = Release|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Release OpenMP|Win32.ActiveCfg = Release|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Release OpenMP|x64.ActiveCfg = Release|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Release OpenMP|x64.Build.0 = Release|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Release|Any CPU.ActiveCfg = Release|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Release|Mixed Platforms.Build.0 = Release|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Release|Win32.ActiveCfg = Release|Win32 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Release|Win32.Build.0 = Release|Win32 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Release|x64.ActiveCfg = Release|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Release|x64.Build.0 = Release|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Debug MPI|Any CPU.ActiveCfg = Debug|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Debug MPI|Mixed Platforms.ActiveCfg = Debug|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Debug MPI|Mixed Platforms.Build.0 = Debug|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Debug MPI|Win32.ActiveCfg = Debug|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Debug MPI|x64.ActiveCfg = Debug|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Debug MPI|x64.Build.0 = Debug|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Debug OpenMP|Any CPU.ActiveCfg = Debug|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Debug OpenMP|Mixed Platforms.ActiveCfg = Debug|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Debug OpenMP|Mixed Platforms.Build.0 = Debug|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Debug OpenMP|Win32.ActiveCfg = Debug|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Debug OpenMP|x64.ActiveCfg = Debug|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Debug OpenMP|x64.Build.0 = Debug|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Debug|Any CPU.ActiveCfg = Debug|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Debug|Win32.ActiveCfg = Debug|Win32 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Debug|Win32.Build.0 = Debug|Win32 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Debug|x64.ActiveCfg = Debug|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Debug|x64.Build.0 = Debug|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Release MPI|Any CPU.ActiveCfg = Release|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Release MPI|Mixed Platforms.ActiveCfg = Release|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Release MPI|Mixed Platforms.Build.0 = Release|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Release MPI|Win32.ActiveCfg = Release|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Release MPI|x64.ActiveCfg = Release|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Release MPI|x64.Build.0 = Release|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Release OpenMP|Any CPU.ActiveCfg = Release|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Release OpenMP|Mixed Platforms.ActiveCfg = Release|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Release OpenMP|Mixed Platforms.Build.0 = Release|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Release OpenMP|Win32.ActiveCfg = Release|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Release OpenMP|x64.ActiveCfg = Release|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Release OpenMP|x64.Build.0 = Release|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Release|Any CPU.ActiveCfg = Release|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Release|Mixed Platforms.Build.0 = Release|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Release|Win32.ActiveCfg = Release|Win32 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Release|Win32.Build.0 = Release|Win32 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Release|x64.ActiveCfg = Release|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Release|x64.Build.0 = Release|x64 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Debug MPI|Any CPU.ActiveCfg = Debug|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Debug MPI|Mixed Platforms.ActiveCfg = Debug|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Debug MPI|Mixed Platforms.Build.0 = Debug|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Debug MPI|Win32.ActiveCfg = Debug|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Debug MPI|Win32.Build.0 = Debug|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Debug MPI|x64.ActiveCfg = Debug|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Debug OpenMP|Any CPU.ActiveCfg = Debug|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Debug OpenMP|Mixed Platforms.ActiveCfg = Debug|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Debug OpenMP|Mixed Platforms.Build.0 = Debug|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Debug OpenMP|Win32.ActiveCfg = Debug|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Debug OpenMP|Win32.Build.0 = Debug|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Debug OpenMP|x64.ActiveCfg = Debug|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Debug|Win32.ActiveCfg = Debug|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Debug|Win32.Build.0 = Debug|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Debug|x64.ActiveCfg = Debug|x64 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Release MPI|Any CPU.ActiveCfg = Release|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Release MPI|Mixed Platforms.ActiveCfg = Release|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Release MPI|Mixed Platforms.Build.0 = Release|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Release MPI|Win32.ActiveCfg = Release|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Release MPI|Win32.Build.0 = Release|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Release MPI|x64.ActiveCfg = Release|x64 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Release OpenMP|Any CPU.ActiveCfg = Release|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Release OpenMP|Mixed Platforms.ActiveCfg = Release|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Release OpenMP|Mixed Platforms.Build.0 = Release|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Release OpenMP|Win32.ActiveCfg = Release|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Release OpenMP|Win32.Build.0 = Release|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Release OpenMP|x64.ActiveCfg = Release|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Release|Any CPU.ActiveCfg = Release|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Release|Mixed Platforms.Build.0 = Release|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Release|Win32.ActiveCfg = Release|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Release|Win32.Build.0 = Release|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Release|x64.ActiveCfg = Release|x64 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Debug MPI|Any CPU.ActiveCfg = Release OpenMP|x64 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Debug MPI|Any CPU.Build.0 = Release OpenMP|x64 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Debug MPI|Mixed Platforms.ActiveCfg = Debug OpenMP|Win32 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Debug MPI|Mixed Platforms.Build.0 = Debug OpenMP|Win32 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Debug MPI|Win32.ActiveCfg = Debug OpenMP|Win32 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Debug MPI|Win32.Build.0 = Debug OpenMP|Win32 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Debug MPI|x64.ActiveCfg = Debug OpenMP|x64 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Debug MPI|x64.Build.0 = Debug OpenMP|x64 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Debug OpenMP|Any CPU.ActiveCfg = Debug OpenMP|x64 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Debug OpenMP|Mixed Platforms.ActiveCfg = Debug OpenMP|Win32 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Debug OpenMP|Mixed Platforms.Build.0 = Debug OpenMP|Win32 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Debug OpenMP|Win32.ActiveCfg = Debug OpenMP|Win32 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Debug OpenMP|Win32.Build.0 = Debug OpenMP|Win32 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Debug OpenMP|x64.ActiveCfg = Debug OpenMP|x64 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Debug OpenMP|x64.Build.0 = Debug OpenMP|x64 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Debug|Win32.ActiveCfg = Debug|Win32 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Debug|Win32.Build.0 = Debug|Win32 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Debug|x64.ActiveCfg = Debug|x64 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Debug|x64.Build.0 = Debug|x64 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Release MPI|Any CPU.ActiveCfg = Release OpenMP|x64 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Release MPI|Any CPU.Build.0 = Release OpenMP|x64 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Release MPI|Mixed Platforms.ActiveCfg = Release OpenMP|Win32 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Release MPI|Mixed Platforms.Build.0 = Release OpenMP|Win32 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Release MPI|Win32.ActiveCfg = Release OpenMP|Win32 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Release MPI|Win32.Build.0 = Release OpenMP|Win32 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Release MPI|x64.ActiveCfg = Release|x64 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Release MPI|x64.Build.0 = Release|x64 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Release OpenMP|Any CPU.ActiveCfg = Release OpenMP|x64 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Release OpenMP|Mixed Platforms.ActiveCfg = Release OpenMP|Win32 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Release OpenMP|Mixed Platforms.Build.0 = Release OpenMP|Win32 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Release OpenMP|Win32.ActiveCfg = Release OpenMP|Win32 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Release OpenMP|Win32.Build.0 = Release OpenMP|Win32 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Release OpenMP|x64.ActiveCfg = Release OpenMP|x64 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Release OpenMP|x64.Build.0 = Release OpenMP|x64 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Release|Any CPU.ActiveCfg = Release|Win32 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Release|Mixed Platforms.Build.0 = Release|Win32 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Release|Win32.ActiveCfg = Release|Win32 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Release|Win32.Build.0 = Release|Win32 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Release|x64.ActiveCfg = Release|x64 + {2E3EE7BF-B4D7-4E31-9B3A-7DC55FE41D40}.Release|x64.Build.0 = Release|x64 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Debug MPI|Any CPU.ActiveCfg = Debug|x64 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Debug MPI|Mixed Platforms.ActiveCfg = Debug|x64 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Debug MPI|Mixed Platforms.Build.0 = Debug|x64 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Debug MPI|Win32.ActiveCfg = Debug|Win32 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Debug MPI|Win32.Build.0 = Debug|Win32 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Debug MPI|x64.ActiveCfg = Debug|Win32 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Debug OpenMP|Any CPU.ActiveCfg = Debug|x64 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Debug OpenMP|Mixed Platforms.ActiveCfg = Debug|x64 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Debug OpenMP|Mixed Platforms.Build.0 = Debug|x64 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Debug OpenMP|Win32.ActiveCfg = Debug|Win32 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Debug OpenMP|Win32.Build.0 = Debug|Win32 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Debug OpenMP|x64.ActiveCfg = Debug|Win32 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Debug|Any CPU.ActiveCfg = Debug|x64 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Debug|Win32.ActiveCfg = Debug|Win32 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Debug|Win32.Build.0 = Debug|Win32 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Debug|x64.ActiveCfg = Debug|x64 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Debug|x64.Build.0 = Debug|x64 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Release MPI|Any CPU.ActiveCfg = Release|x64 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Release MPI|Mixed Platforms.ActiveCfg = Release|x64 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Release MPI|Mixed Platforms.Build.0 = Release|x64 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Release MPI|Win32.ActiveCfg = Release|Win32 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Release MPI|Win32.Build.0 = Release|Win32 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Release MPI|x64.ActiveCfg = Release|Win32 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Release OpenMP|Any CPU.ActiveCfg = Release|x64 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Release OpenMP|Mixed Platforms.ActiveCfg = Release|x64 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Release OpenMP|Mixed Platforms.Build.0 = Release|x64 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Release OpenMP|Win32.ActiveCfg = Release|Win32 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Release OpenMP|Win32.Build.0 = Release|Win32 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Release OpenMP|x64.ActiveCfg = Release|Win32 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Release|Any CPU.ActiveCfg = Release|x64 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Release|Mixed Platforms.Build.0 = Release|x64 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Release|Win32.ActiveCfg = Release|Win32 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Release|Win32.Build.0 = Release|Win32 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Release|x64.ActiveCfg = Release|x64 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Debug MPI|Any CPU.ActiveCfg = Debug|x64 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Debug MPI|Mixed Platforms.ActiveCfg = Debug|x64 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Debug MPI|Mixed Platforms.Build.0 = Debug|x64 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Debug MPI|Win32.ActiveCfg = Debug|Win32 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Debug MPI|Win32.Build.0 = Debug|Win32 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Debug MPI|x64.ActiveCfg = Debug|Win32 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Debug OpenMP|Any CPU.ActiveCfg = Debug|x64 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Debug OpenMP|Mixed Platforms.ActiveCfg = Debug|x64 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Debug OpenMP|Mixed Platforms.Build.0 = Debug|x64 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Debug OpenMP|Win32.ActiveCfg = Debug|Win32 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Debug OpenMP|Win32.Build.0 = Debug|Win32 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Debug OpenMP|x64.ActiveCfg = Debug|Win32 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Debug|Any CPU.ActiveCfg = Debug|x64 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Debug|Win32.ActiveCfg = Debug|Win32 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Debug|Win32.Build.0 = Debug|Win32 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Debug|x64.ActiveCfg = Debug|x64 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Release MPI|Any CPU.ActiveCfg = Release|x64 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Release MPI|Mixed Platforms.ActiveCfg = Release|x64 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Release MPI|Mixed Platforms.Build.0 = Release|x64 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Release MPI|Win32.ActiveCfg = Release|Win32 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Release MPI|Win32.Build.0 = Release|Win32 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Release MPI|x64.ActiveCfg = Release|Win32 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Release OpenMP|Any CPU.ActiveCfg = Release|x64 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Release OpenMP|Mixed Platforms.ActiveCfg = Release|x64 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Release OpenMP|Mixed Platforms.Build.0 = Release|x64 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Release OpenMP|Win32.ActiveCfg = Release|Win32 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Release OpenMP|Win32.Build.0 = Release|Win32 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Release OpenMP|x64.ActiveCfg = Release|Win32 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Release|Any CPU.ActiveCfg = Release|x64 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Release|Mixed Platforms.Build.0 = Release|x64 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Release|Win32.ActiveCfg = Release|Win32 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Release|Win32.Build.0 = Release|Win32 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Release|x64.ActiveCfg = Release|x64 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Release|x64.Build.0 = Release|x64 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Debug MPI|Any CPU.ActiveCfg = Debug|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Debug MPI|Mixed Platforms.ActiveCfg = Debug|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Debug MPI|Mixed Platforms.Build.0 = Debug|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Debug MPI|Win32.ActiveCfg = Debug|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Debug MPI|Win32.Build.0 = Debug|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Debug MPI|x64.ActiveCfg = Debug|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Debug OpenMP|Any CPU.ActiveCfg = Debug|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Debug OpenMP|Mixed Platforms.ActiveCfg = Debug|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Debug OpenMP|Mixed Platforms.Build.0 = Debug|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Debug OpenMP|Win32.ActiveCfg = Debug|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Debug OpenMP|Win32.Build.0 = Debug|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Debug OpenMP|x64.ActiveCfg = Debug|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Debug|Win32.ActiveCfg = Debug|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Debug|Win32.Build.0 = Debug|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Debug|x64.ActiveCfg = Debug|x64 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Release MPI|Any CPU.ActiveCfg = Release|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Release MPI|Mixed Platforms.ActiveCfg = Release|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Release MPI|Mixed Platforms.Build.0 = Release|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Release MPI|Win32.ActiveCfg = Release|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Release MPI|Win32.Build.0 = Release|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Release MPI|x64.ActiveCfg = Release|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Release OpenMP|Any CPU.ActiveCfg = Release|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Release OpenMP|Mixed Platforms.ActiveCfg = Release|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Release OpenMP|Mixed Platforms.Build.0 = Release|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Release OpenMP|Win32.ActiveCfg = Release|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Release OpenMP|Win32.Build.0 = Release|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Release OpenMP|x64.ActiveCfg = Release|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Release|Any CPU.ActiveCfg = Release|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Release|Mixed Platforms.Build.0 = Release|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Release|Win32.ActiveCfg = Release|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Release|Win32.Build.0 = Release|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Release|x64.ActiveCfg = Release|x64 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Debug MPI|Any CPU.ActiveCfg = Debug|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Debug MPI|Mixed Platforms.ActiveCfg = Debug|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Debug MPI|Mixed Platforms.Build.0 = Debug|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Debug MPI|Win32.ActiveCfg = Debug|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Debug MPI|Win32.Build.0 = Debug|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Debug MPI|x64.ActiveCfg = Debug|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Debug OpenMP|Any CPU.ActiveCfg = Debug|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Debug OpenMP|Mixed Platforms.ActiveCfg = Debug|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Debug OpenMP|Mixed Platforms.Build.0 = Debug|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Debug OpenMP|Win32.ActiveCfg = Debug|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Debug OpenMP|Win32.Build.0 = Debug|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Debug OpenMP|x64.ActiveCfg = Debug|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Debug|Win32.ActiveCfg = Debug|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Debug|Win32.Build.0 = Debug|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Debug|x64.ActiveCfg = Debug|x64 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Release MPI|Any CPU.ActiveCfg = Release|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Release MPI|Mixed Platforms.ActiveCfg = Release|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Release MPI|Mixed Platforms.Build.0 = Release|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Release MPI|Win32.ActiveCfg = Release|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Release MPI|Win32.Build.0 = Release|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Release MPI|x64.ActiveCfg = Release|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Release OpenMP|Any CPU.ActiveCfg = Release|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Release OpenMP|Mixed Platforms.ActiveCfg = Release|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Release OpenMP|Mixed Platforms.Build.0 = Release|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Release OpenMP|Win32.ActiveCfg = Release|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Release OpenMP|Win32.Build.0 = Release|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Release OpenMP|x64.ActiveCfg = Release|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Release|Any CPU.ActiveCfg = Release|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Release|Mixed Platforms.Build.0 = Release|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Release|Win32.ActiveCfg = Release|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Release|Win32.Build.0 = Release|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Release|x64.ActiveCfg = Release|x64 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Debug MPI|Any CPU.ActiveCfg = Debug|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Debug MPI|Mixed Platforms.ActiveCfg = Debug|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Debug MPI|Mixed Platforms.Build.0 = Debug|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Debug MPI|Win32.ActiveCfg = Debug|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Debug MPI|Win32.Build.0 = Debug|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Debug MPI|x64.ActiveCfg = Debug|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Debug OpenMP|Any CPU.ActiveCfg = Debug|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Debug OpenMP|Mixed Platforms.ActiveCfg = Debug|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Debug OpenMP|Mixed Platforms.Build.0 = Debug|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Debug OpenMP|Win32.ActiveCfg = Debug|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Debug OpenMP|Win32.Build.0 = Debug|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Debug OpenMP|x64.ActiveCfg = Debug|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Debug|Win32.ActiveCfg = Debug|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Debug|Win32.Build.0 = Debug|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Debug|x64.ActiveCfg = Debug|x64 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Release MPI|Any CPU.ActiveCfg = Release|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Release MPI|Mixed Platforms.ActiveCfg = Release|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Release MPI|Mixed Platforms.Build.0 = Release|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Release MPI|Win32.ActiveCfg = Release|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Release MPI|Win32.Build.0 = Release|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Release MPI|x64.ActiveCfg = Release|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Release OpenMP|Any CPU.ActiveCfg = Release|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Release OpenMP|Mixed Platforms.ActiveCfg = Release|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Release OpenMP|Mixed Platforms.Build.0 = Release|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Release OpenMP|Win32.ActiveCfg = Release|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Release OpenMP|Win32.Build.0 = Release|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Release OpenMP|x64.ActiveCfg = Release|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Release|Any CPU.ActiveCfg = Release|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Release|Mixed Platforms.Build.0 = Release|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Release|Win32.ActiveCfg = Release|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Release|Win32.Build.0 = Release|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Release|x64.ActiveCfg = Release|x64 + {A2362933-01EF-4E31-914B-C4316A54E065}.Debug MPI|Any CPU.ActiveCfg = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Debug MPI|Any CPU.Build.0 = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Debug MPI|Mixed Platforms.ActiveCfg = Debug|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Debug MPI|Mixed Platforms.Build.0 = Debug|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Debug MPI|Win32.ActiveCfg = Debug|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Debug MPI|Win32.Build.0 = Debug|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Debug MPI|x64.ActiveCfg = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Debug MPI|x64.Build.0 = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Debug OpenMP|Any CPU.ActiveCfg = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Debug OpenMP|Any CPU.Build.0 = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Debug OpenMP|Mixed Platforms.ActiveCfg = Debug|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Debug OpenMP|Mixed Platforms.Build.0 = Debug|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Debug OpenMP|Win32.ActiveCfg = Debug|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Debug OpenMP|Win32.Build.0 = Debug|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Debug OpenMP|x64.ActiveCfg = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Debug OpenMP|x64.Build.0 = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Debug|Win32.ActiveCfg = Debug|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Debug|Win32.Build.0 = Debug|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Debug|x64.ActiveCfg = Debug|x64 + {A2362933-01EF-4E31-914B-C4316A54E065}.Release MPI|Any CPU.ActiveCfg = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Release MPI|Any CPU.Build.0 = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Release MPI|Mixed Platforms.ActiveCfg = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Release MPI|Mixed Platforms.Build.0 = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Release MPI|Win32.ActiveCfg = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Release MPI|Win32.Build.0 = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Release MPI|x64.ActiveCfg = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Release MPI|x64.Build.0 = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Release OpenMP|Any CPU.ActiveCfg = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Release OpenMP|Any CPU.Build.0 = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Release OpenMP|Mixed Platforms.ActiveCfg = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Release OpenMP|Mixed Platforms.Build.0 = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Release OpenMP|Win32.ActiveCfg = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Release OpenMP|Win32.Build.0 = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Release OpenMP|x64.ActiveCfg = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Release OpenMP|x64.Build.0 = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Release|Any CPU.ActiveCfg = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Release|Mixed Platforms.Build.0 = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Release|Win32.ActiveCfg = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Release|Win32.Build.0 = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Release|x64.ActiveCfg = Release|x64 + {31718428-0170-4952-924F-1568E2FA72EF}.Debug MPI|Any CPU.ActiveCfg = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Debug MPI|Any CPU.Build.0 = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Debug MPI|Mixed Platforms.ActiveCfg = Debug|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Debug MPI|Mixed Platforms.Build.0 = Debug|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Debug MPI|Win32.ActiveCfg = Debug|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Debug MPI|Win32.Build.0 = Debug|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Debug MPI|x64.ActiveCfg = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Debug MPI|x64.Build.0 = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Debug OpenMP|Any CPU.ActiveCfg = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Debug OpenMP|Any CPU.Build.0 = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Debug OpenMP|Mixed Platforms.ActiveCfg = Debug|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Debug OpenMP|Mixed Platforms.Build.0 = Debug|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Debug OpenMP|Win32.ActiveCfg = Debug|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Debug OpenMP|Win32.Build.0 = Debug|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Debug OpenMP|x64.ActiveCfg = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Debug OpenMP|x64.Build.0 = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Debug|Win32.ActiveCfg = Debug|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Debug|Win32.Build.0 = Debug|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Debug|x64.ActiveCfg = Debug|x64 + {31718428-0170-4952-924F-1568E2FA72EF}.Release MPI|Any CPU.ActiveCfg = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Release MPI|Any CPU.Build.0 = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Release MPI|Mixed Platforms.ActiveCfg = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Release MPI|Mixed Platforms.Build.0 = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Release MPI|Win32.ActiveCfg = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Release MPI|Win32.Build.0 = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Release MPI|x64.ActiveCfg = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Release MPI|x64.Build.0 = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Release OpenMP|Any CPU.ActiveCfg = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Release OpenMP|Any CPU.Build.0 = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Release OpenMP|Mixed Platforms.ActiveCfg = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Release OpenMP|Mixed Platforms.Build.0 = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Release OpenMP|Win32.ActiveCfg = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Release OpenMP|Win32.Build.0 = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Release OpenMP|x64.ActiveCfg = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Release OpenMP|x64.Build.0 = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Release|Any CPU.ActiveCfg = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Release|Mixed Platforms.Build.0 = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Release|Win32.ActiveCfg = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Release|Win32.Build.0 = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Release|x64.ActiveCfg = Release|x64 + {31718428-0170-4952-924F-1568E2FA72EF}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Solutions/MOHIDNumerics/MohidBase1/MohidBase1.vfproj b/Solutions/MOHIDNumerics/MohidBase1/MohidBase1.vfproj new file mode 100644 index 000000000..d772c7bbb --- /dev/null +++ b/Solutions/MOHIDNumerics/MohidBase1/MohidBase1.vfproj @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/MOHIDNumerics/MohidBase2/MohidBase2.vfproj b/Solutions/MOHIDNumerics/MohidBase2/MohidBase2.vfproj new file mode 100644 index 000000000..b46d6787b --- /dev/null +++ b/Solutions/MOHIDNumerics/MohidBase2/MohidBase2.vfproj @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/MOHIDNumerics/MohidLand/MohidLand.vfproj b/Solutions/MOHIDNumerics/MohidLand/MohidLand.vfproj new file mode 100644 index 000000000..1097c9a9b --- /dev/null +++ b/Solutions/MOHIDNumerics/MohidLand/MohidLand.vfproj @@ -0,0 +1,101 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/MOHIDNumerics/MohidWater/MohidWater.vfproj b/Solutions/MOHIDNumerics/MohidWater/MohidWater.vfproj new file mode 100644 index 000000000..b8e97ef55 --- /dev/null +++ b/Solutions/MOHIDNumerics/MohidWater/MohidWater.vfproj @@ -0,0 +1,176 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/MOHIDNumerics/TidePrev/TidePrev.vfproj b/Solutions/MOHIDNumerics/TidePrev/TidePrev.vfproj new file mode 100644 index 000000000..b55c51f95 --- /dev/null +++ b/Solutions/MOHIDNumerics/TidePrev/TidePrev.vfproj @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/MOHIDNumerics/Valida4D/Valida4D.vfproj b/Solutions/MOHIDNumerics/Valida4D/Valida4D.vfproj new file mode 100644 index 000000000..f49ad4393 --- /dev/null +++ b/Solutions/MOHIDNumerics/Valida4D/Valida4D.vfproj @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/MOHIDNumerics/hdf2surfer/hdf2surfer.vfproj b/Solutions/MOHIDNumerics/hdf2surfer/hdf2surfer.vfproj new file mode 100644 index 000000000..1bf5e8816 --- /dev/null +++ b/Solutions/MOHIDNumerics/hdf2surfer/hdf2surfer.vfproj @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2015_IntelFortran18/MOHIDNumerics/MohidBase2/MohidBase2.vfproj b/Solutions/VisualStudio2015_IntelFortran18/MOHIDNumerics/MohidBase2/MohidBase2.vfproj index 1cc1ca743..6e1d17bdc 100644 --- a/Solutions/VisualStudio2015_IntelFortran18/MOHIDNumerics/MohidBase2/MohidBase2.vfproj +++ b/Solutions/VisualStudio2015_IntelFortran18/MOHIDNumerics/MohidBase2/MohidBase2.vfproj @@ -126,6 +126,5 @@ - - + diff --git a/Solutions/VisualStudio2015_IntelFortran18/MOHIDNumerics/MohidWater/MohidWater.vfproj b/Solutions/VisualStudio2015_IntelFortran18/MOHIDNumerics/MohidWater/MohidWater.vfproj index b8729eba2..e043fff38 100644 --- a/Solutions/VisualStudio2015_IntelFortran18/MOHIDNumerics/MohidWater/MohidWater.vfproj +++ b/Solutions/VisualStudio2015_IntelFortran18/MOHIDNumerics/MohidWater/MohidWater.vfproj @@ -161,11 +161,11 @@ - + - - + + diff --git a/Solutions/VisualStudio2017_IntelFortran18/MOHIDNumerics/MOHIDBase1/MOHIDBase1.vfproj b/Solutions/VisualStudio2017_IntelFortran18/MOHIDNumerics/MOHIDBase1/MOHIDBase1.vfproj index bde17daef..08dc159d5 100644 --- a/Solutions/VisualStudio2017_IntelFortran18/MOHIDNumerics/MOHIDBase1/MOHIDBase1.vfproj +++ b/Solutions/VisualStudio2017_IntelFortran18/MOHIDNumerics/MOHIDBase1/MOHIDBase1.vfproj @@ -145,7 +145,7 @@ - + @@ -155,7 +155,7 @@ - + @@ -165,7 +165,7 @@ - + @@ -390,10 +390,10 @@ - - + + @@ -431,20 +431,20 @@ - - + + - - + + @@ -488,10 +488,10 @@ - - + + @@ -509,79 +509,79 @@ - - - - - + - + + + + + - + - - - + + + - + - - - + - + - + - - - + - + - + - + - + - + - + - + + + - + - + - + + + @@ -606,33 +606,33 @@ + - - - + + - - + - + + - - + + - - + + diff --git a/Solutions/VisualStudio2017_IntelFortran18/MOHIDNumerics/MOHIDBase2/MOHIDBase2.vfproj b/Solutions/VisualStudio2017_IntelFortran18/MOHIDNumerics/MOHIDBase2/MOHIDBase2.vfproj index 047caaf9b..b1122f0f4 100644 --- a/Solutions/VisualStudio2017_IntelFortran18/MOHIDNumerics/MOHIDBase2/MOHIDBase2.vfproj +++ b/Solutions/VisualStudio2017_IntelFortran18/MOHIDNumerics/MOHIDBase2/MOHIDBase2.vfproj @@ -155,7 +155,7 @@ - + diff --git a/Solutions/VisualStudio2017_IntelFortran18/MOHIDNumerics/MOHIDLand/MOHIDLand.vfproj b/Solutions/VisualStudio2017_IntelFortran18/MOHIDNumerics/MOHIDLand/MOHIDLand.vfproj index c4c040d39..5b6181277 100644 --- a/Solutions/VisualStudio2017_IntelFortran18/MOHIDNumerics/MOHIDLand/MOHIDLand.vfproj +++ b/Solutions/VisualStudio2017_IntelFortran18/MOHIDNumerics/MOHIDLand/MOHIDLand.vfproj @@ -145,7 +145,7 @@ - + @@ -155,7 +155,7 @@ - + @@ -332,26 +332,26 @@ - - + + - + - - - + + + diff --git a/Solutions/VisualStudio2017_IntelFortran18/MOHIDNumerics/MOHIDRiver/MOHIDRiver.vfproj b/Solutions/VisualStudio2017_IntelFortran18/MOHIDNumerics/MOHIDRiver/MOHIDRiver.vfproj index 2a480e77e..f96b266a2 100644 --- a/Solutions/VisualStudio2017_IntelFortran18/MOHIDNumerics/MOHIDRiver/MOHIDRiver.vfproj +++ b/Solutions/VisualStudio2017_IntelFortran18/MOHIDNumerics/MOHIDRiver/MOHIDRiver.vfproj @@ -226,7 +226,7 @@ - + diff --git a/Solutions/VisualStudio2017_IntelFortran18/MOHIDNumerics/MOHIDWater/MOHIDWater.vfproj b/Solutions/VisualStudio2017_IntelFortran18/MOHIDNumerics/MOHIDWater/MOHIDWater.vfproj index 56d6b8bcc..84168b24e 100644 --- a/Solutions/VisualStudio2017_IntelFortran18/MOHIDNumerics/MOHIDWater/MOHIDWater.vfproj +++ b/Solutions/VisualStudio2017_IntelFortran18/MOHIDNumerics/MOHIDWater/MOHIDWater.vfproj @@ -135,8 +135,8 @@ - - + + @@ -146,7 +146,7 @@ - + @@ -343,25 +343,25 @@ - + - - - + + + - + - + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/BasinDelineator/BasinDelineator.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/BasinDelineator/BasinDelineator.vfproj new file mode 100644 index 000000000..1f3aedc81 --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/BasinDelineator/BasinDelineator.vfproj @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/Compare2HDFfiles/Compare2HDFfiles.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/Compare2HDFfiles/Compare2HDFfiles.vfproj new file mode 100644 index 000000000..990066599 --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/Compare2HDFfiles/Compare2HDFfiles.vfproj @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/Convert2Hdf5/Convert2Hdf5.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/Convert2Hdf5/Convert2Hdf5.vfproj new file mode 100644 index 000000000..34b55646b --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/Convert2Hdf5/Convert2Hdf5.vfproj @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/Convert2netcdf/Convert2netcdf.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/Convert2netcdf/Convert2netcdf.vfproj new file mode 100644 index 000000000..898733858 --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/Convert2netcdf/Convert2netcdf.vfproj @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/ConvertGridDataToHDF5/ConvertGridDataToHDF5.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/ConvertGridDataToHDF5/ConvertGridDataToHDF5.vfproj new file mode 100644 index 000000000..1dbb7cfee --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/ConvertGridDataToHDF5/ConvertGridDataToHDF5.vfproj @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/ConvertHDF5ToGridData/ConvertHDF5ToGridData.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/ConvertHDF5ToGridData/ConvertHDF5ToGridData.vfproj new file mode 100644 index 000000000..f46b135da --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/ConvertHDF5ToGridData/ConvertHDF5ToGridData.vfproj @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/ConvertToTimeSerie/ConvertToTimeSerie.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/ConvertToTimeSerie/ConvertToTimeSerie.vfproj new file mode 100644 index 000000000..69dc9ef8b --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/ConvertToTimeSerie/ConvertToTimeSerie.vfproj @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/ConvertToXYZ/ConvertToXYZ.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/ConvertToXYZ/ConvertToXYZ.vfproj new file mode 100644 index 000000000..57aba906d --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/ConvertToXYZ/ConvertToXYZ.vfproj @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/CreateDigitalTerrain/DigitalTerrainCreator.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/CreateDigitalTerrain/DigitalTerrainCreator.vfproj new file mode 100644 index 000000000..273857c5d --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/CreateDigitalTerrain/DigitalTerrainCreator.vfproj @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/CudaThomas/CudaThomas.vcproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/CudaThomas/CudaThomas.vcproj new file mode 100644 index 000000000..4fcf4736b --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/CudaThomas/CudaThomas.vcproj @@ -0,0 +1,761 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/CudaThomas/CudaThomas.vcxproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/CudaThomas/CudaThomas.vcxproj new file mode 100644 index 000000000..fc4dcee60 --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/CudaThomas/CudaThomas.vcxproj @@ -0,0 +1,624 @@ + + + + + Debug Double CUDA + Win32 + + + Debug Double CUDA + x64 + + + Debug Double + Win32 + + + Debug Double + x64 + + + Debug + Win32 + + + Debug + x64 + + + Release Double CUDA + Win32 + + + Release Double CUDA + x64 + + + Release Double + Win32 + + + Release Double + x64 + + + Release + Win32 + + + Release + x64 + + + + + + true + true + true + true + true + true + true + true + true + + + + + + + + + + {6AC0FA32-B7FA-42E9-A36D-952AAD37302E} + CudaWrapper + + + + StaticLibrary + true + MultiByte + + + StaticLibrary + true + MultiByte + + + StaticLibrary + true + MultiByte + + + StaticLibrary + true + MultiByte + + + StaticLibrary + true + MultiByte + + + StaticLibrary + true + MultiByte + + + StaticLibrary + true + MultiByte + + + StaticLibrary + true + MultiByte + + + StaticLibrary + true + MultiByte + + + StaticLibrary + true + MultiByte + + + StaticLibrary + false + true + MultiByte + + + StaticLibrary + false + true + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + .lib + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + true + .lib + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + true + .lib + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + true + .lib + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + true + .lib + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + true + .lib + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + true + .lib + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + true + .lib + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + true + .lib + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + true + .lib + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + true + .lib + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + true + .lib + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + + Level3 + Disabled + ..\..\..\..\Software\CudaWrapper;%(AdditionalIncludeDirectories);$(CudaToolkitIncludeDir) + MultiThreadedDebug + + + true + Console + cudart.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + echo copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" +copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" + + + compute_13,sm_13 + MTd + ..\..\..\..\Software\CudaWrapper + + + CudaWrapper.lib;cudart.lib; + ..\CudaWrapper\$(Platform)\$(Configuration)\;%(AdditionalLibraryDirectories);$(CudaToolkitLibDir) + + + + + Level3 + Disabled + ..\..\..\..\Software\CudaWrapper;%(AdditionalIncludeDirectories);$(CudaToolkitIncludeDir) + MultiThreadedDebug + + + true + Console + cudart.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + echo copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" +copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" + + + compute_13,sm_13 + MTd + ..\..\..\..\Software\CudaWrapper + + + CudaWrapper.lib;cudart.lib; + ..\CudaWrapper\$(Platform)\$(Configuration)\;%(AdditionalLibraryDirectories);$(CudaToolkitLibDir) + + + + + Level3 + MaxSpeed + ..\..\..\..\Software\CudaWrapper;%(AdditionalIncludeDirectories);$(CudaToolkitIncludeDir) + MultiThreadedDebug + true + Speed + false + true + ProgramDatabase + Default + + + true + Console + cudart.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + echo copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" +copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" + + + compute_13,sm_13 + MTd + ..\..\..\..\Software\CudaWrapper + O2 + + + CudaWrapper.lib;cudart.lib; + ..\CudaWrapper\$(Platform)\$(Configuration)\;%(AdditionalLibraryDirectories);$(CudaToolkitLibDir) + + + + + Level3 + MaxSpeed + ..\..\..\..\Software\CudaWrapper;%(AdditionalIncludeDirectories);$(CudaToolkitIncludeDir) + MultiThreadedDebug + _USE_PAGELOCKED;_MBCS;%(PreprocessorDefinitions) + + + Speed + true + false + true + Default + + + true + Console + cudart.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + echo copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" +copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" + + + compute_13,sm_13 + MTd + ..\..\..\..\Software\CudaWrapper + O2 + + + CudaWrapper.lib;cudart.lib; + ..\CudaWrapper\$(Platform)\$(Configuration)\;%(AdditionalLibraryDirectories);$(CudaToolkitLibDir) + + + + + Level3 + Disabled + ..\..\..\..\Software\CudaWrapper;%(AdditionalIncludeDirectories);$(CudaToolkitIncludeDir) + MultiThreadedDebug + _USE_PAGELOCKED;_MBCS;%(PreprocessorDefinitions) + + + true + Console + cudart.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + echo copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" +copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" + + + compute_13,sm_13 + MTd + ..\..\..\..\Software\CudaWrapper + + + CudaWrapper.lib;cudart.lib; + ..\CudaWrapper\$(Platform)\$(Configuration)\;%(AdditionalLibraryDirectories);$(CudaToolkitLibDir) + + + + + Level3 + Disabled + ..\..\..\..\Software\CudaWrapper;%(AdditionalIncludeDirectories);$(CudaToolkitIncludeDir) + MultiThreadedDebug + + + true + Console + cudart.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + echo copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" +copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" + + + compute_13,sm_13 + MTd + ..\..\..\..\Software\CudaWrapper + 64 + 0 + true + false + false + + + CudaWrapper.lib;cudart.lib; + ..\CudaWrapper\$(Platform)\$(Configuration)\;%(AdditionalLibraryDirectories);$(CudaToolkitLibDir) + + + + + Level3 + Disabled + ..\..\..\..\Software\CudaWrapper;%(AdditionalIncludeDirectories);$(CudaToolkitIncludeDir) + MultiThreadedDebug + + + true + Console + cudart.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + echo copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" +copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" + + + compute_13,sm_13 + MTd + ..\..\..\..\Software\CudaWrapper + 64 + 0 + true + false + false + + + CudaWrapper.lib;cudart.lib; + ..\CudaWrapper\$(Platform)\$(Configuration)\;%(AdditionalLibraryDirectories);$(CudaToolkitLibDir) + + + + + Level3 + Disabled + ..\..\..\..\Software\CudaWrapper;%(AdditionalIncludeDirectories);$(CudaToolkitIncludeDir) + MultiThreadedDebug + + + true + Console + cudart.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + echo copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" +copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" + + + compute_13,sm_13 + MTd + ..\..\..\..\Software\CudaWrapper + 64 + 0 + true + false + false + + + CudaWrapper.lib;cudart.lib; + ..\CudaWrapper\$(Platform)\$(Configuration)\;%(AdditionalLibraryDirectories);$(CudaToolkitLibDir) + + + + + Level3 + Disabled + ..\..\..\..\Software\CudaWrapper;%(AdditionalIncludeDirectories);$(CudaToolkitIncludeDir) + MultiThreadedDebug + + + true + Console + cudart.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + echo copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" +copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" + + + compute_13,sm_13 + MTd + ..\..\..\..\Software\CudaWrapper + 64 + 0 + true + false + false + + + CudaWrapper.lib;cudart.lib; + ..\CudaWrapper\$(Platform)\$(Configuration)\;%(AdditionalLibraryDirectories);$(CudaToolkitLibDir) + + + + + Level3 + Disabled + ..\..\..\..\Software\CudaWrapper;%(AdditionalIncludeDirectories);$(CudaToolkitIncludeDir) + MultiThreadedDebug + + + true + Console + cudart.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + echo copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" +copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" + + + compute_13,sm_13 + MTd + ..\..\..\..\Software\CudaWrapper + 64 + 0 + true + false + false + + + CudaWrapper.lib;cudart.lib; + ..\CudaWrapper\$(Platform)\$(Configuration)\;%(AdditionalLibraryDirectories);$(CudaToolkitLibDir) + + + + + Level3 + MaxSpeed + true + true + ..\..\..\..\Software\CudaWrapper;%(AdditionalIncludeDirectories);$(CudaToolkitIncludeDir) + MultiThreaded + + + true + true + true + Console + cudart.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + echo copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" +copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" + + + compute_13,sm_13 + MT + ..\..\..\..\Software\CudaWrapper + O2 + + + CudaWrapper.lib;cudart.lib; + ..\CudaWrapper\$(Platform)\$(Configuration)\;%(AdditionalLibraryDirectories);$(CudaToolkitLibDir) + + + + + Level3 + MaxSpeed + true + true + ..\..\..\..\Software\CudaWrapper;%(AdditionalIncludeDirectories);$(CudaToolkitIncludeDir) + MultiThreaded + + + true + true + true + Console + cudart.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + echo copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" +copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" + + + compute_13,sm_13 + MT + ..\..\..\..\Software\CudaWrapper + 64 + 32 + O2 + false + + + CudaWrapper.lib;cudart.lib; + ..\CudaWrapper\$(Platform)\$(Configuration)\;%(AdditionalLibraryDirectories);$(CudaToolkitLibDir) + + + + + + + \ No newline at end of file diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/CudaThomas/CudaThomas.vcxproj.filters b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/CudaThomas/CudaThomas.vcxproj.filters new file mode 100644 index 000000000..ea55a2677 --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/CudaThomas/CudaThomas.vcxproj.filters @@ -0,0 +1,29 @@ + + + + + {39bd9efc-e7e8-4b95-85d3-a93bc449faa2} + + + {59260bea-149a-4a8c-9246-57681d1d14a8} + + + + + Source Files + + + Source Files + + + + + Source Files + + + + + Header Files + + + \ No newline at end of file diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/CudaWrapper/CudaWrapper.vcproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/CudaWrapper/CudaWrapper.vcproj new file mode 100644 index 000000000..8b5052cd7 --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/CudaWrapper/CudaWrapper.vcproj @@ -0,0 +1,787 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/CudaWrapper/CudaWrapper.vcxproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/CudaWrapper/CudaWrapper.vcxproj new file mode 100644 index 000000000..156ded5c4 --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/CudaWrapper/CudaWrapper.vcxproj @@ -0,0 +1,560 @@ + + + + + Debug Double CUDA + Win32 + + + Debug Double CUDA + x64 + + + Debug Double + Win32 + + + Debug Double + x64 + + + Debug + Win32 + + + Debug + x64 + + + Release Double CUDA + Win32 + + + Release Double CUDA + x64 + + + Release Double + Win32 + + + Release Double + x64 + + + Release + Win32 + + + Release + x64 + + + + + + + + + + + + + + + + + + + true + true + true + true + true + true + true + true + true + + + + {4BBAD350-2E90-4C49-A71C-B8E50F175567} + CudaWrapper + + + + StaticLibrary + true + MultiByte + + + StaticLibrary + true + MultiByte + + + StaticLibrary + true + MultiByte + + + StaticLibrary + true + MultiByte + + + StaticLibrary + true + MultiByte + + + StaticLibrary + true + MultiByte + + + StaticLibrary + true + MultiByte + + + StaticLibrary + true + MultiByte + + + StaticLibrary + true + MultiByte + + + StaticLibrary + true + MultiByte + + + StaticLibrary + false + true + MultiByte + + + StaticLibrary + false + true + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + .lib + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + true + .lib + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + true + .lib + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + true + .lib + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + true + .lib + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + true + .lib + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + true + .lib + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + true + .lib + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + true + .lib + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + true + .lib + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + true + .lib + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + true + .lib + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + + Level3 + Disabled + MultiThreadedDebug + + + true + Console + cudart.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + echo copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" +copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" + + + compute_13,sm_13 + MTd + + + + + Level3 + Disabled + MultiThreadedDebug + _MBCS;%(PreprocessorDefinitions) + + + true + Console + cudart.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + echo copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" +copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" + + + compute_13,sm_13 + MTd + + + + + Level3 + MaxSpeed + MultiThreadedDebug + _MBCS;%(PreprocessorDefinitions) + true + Speed + false + true + ProgramDatabase + Default + + + true + Console + cudart.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + echo copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" +copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" + + + compute_13,sm_13 + MTd + O2 + + + + + Level3 + MaxSpeed + MultiThreadedDebug + _USE_PAGELOCKED;_MBCS;%(PreprocessorDefinitions) + + + true + Speed + false + true + Default + + + true + Console + cudart.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + echo copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" +copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" + + + compute_13,sm_13 + MTd + O2 + + + + + Level3 + Disabled + MultiThreadedDebug + _USE_PAGELOCKED;_MBCS;%(PreprocessorDefinitions) + + + true + Console + cudart.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + echo copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" +copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" + + + compute_13,sm_13 + MTd + + + + + Level3 + Disabled + MultiThreadedDebug + + + true + Console + cudart.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + echo copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" +copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" + + + compute_13,sm_13 + MTd + 64 + 0 + true + false + false + + + + + Level3 + Disabled + MultiThreadedDebug + + + true + Console + cudart.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + echo copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" +copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" + + + compute_13,sm_13 + MTd + 64 + 0 + true + false + false + + + + + Level3 + Disabled + MultiThreadedDebug + + + true + Console + cudart.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + echo copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" +copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" + + + compute_13,sm_13 + MTd + 64 + 0 + true + false + false + + + + + Level3 + Disabled + MultiThreadedDebug + + + true + Console + cudart.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + echo copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" +copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" + + + compute_13,sm_13 + MTd + 64 + 0 + true + false + false + + + + + Level3 + Disabled + MultiThreadedDebug + + + true + Console + cudart.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + echo copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" +copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" + + + compute_13,sm_13 + MTd + 64 + 0 + true + false + false + + + + + Level3 + MaxSpeed + true + true + MultiThreaded + + + true + true + true + Console + cudart.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + echo copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" +copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" + + + compute_13,sm_13 + MT + + + + + Level3 + MaxSpeed + true + true + MultiThreaded + + + true + true + true + Console + cudart.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) + + + echo copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" +copy "$(CudaToolkitBinDir)\cudart*.dll" "$(OutDir)" + + + compute_13,sm_13 + MT + 64 + 32 + O2 + false + + + + + + + \ No newline at end of file diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/CudaWrapper/CudaWrapper.vcxproj.filters b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/CudaWrapper/CudaWrapper.vcxproj.filters new file mode 100644 index 000000000..15d6bd13e --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/CudaWrapper/CudaWrapper.vcxproj.filters @@ -0,0 +1,50 @@ + + + + + {39bd9efc-e7e8-4b95-85d3-a93bc449faa2} + + + {59260bea-149a-4a8c-9246-57681d1d14a8} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + \ No newline at end of file diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/DDCParser/DDCParser.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/DDCParser/DDCParser.vfproj new file mode 100644 index 000000000..938190836 --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/DDCParser/DDCParser.vfproj @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/DDCWorker/DDCWorker.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/DDCWorker/DDCWorker.vfproj new file mode 100644 index 000000000..520d927c7 --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/DDCWorker/DDCWorker.vfproj @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/DomainConsolidation/DomainConsolidation.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/DomainConsolidation/DomainConsolidation.vfproj new file mode 100644 index 000000000..881f2281a --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/DomainConsolidation/DomainConsolidation.vfproj @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/DrawFluxesInHDF5/DrawFluxesInHDF5.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/DrawFluxesInHDF5/DrawFluxesInHDF5.vfproj new file mode 100644 index 000000000..eb2166643 --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/DrawFluxesInHDF5/DrawFluxesInHDF5.vfproj @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/FillMatrix/FillMatrix.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/FillMatrix/FillMatrix.vfproj new file mode 100644 index 000000000..302039502 --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/FillMatrix/FillMatrix.vfproj @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/FilterBathymetry/FilterBathymetry.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/FilterBathymetry/FilterBathymetry.vfproj new file mode 100644 index 000000000..2e1059e97 --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/FilterBathymetry/FilterBathymetry.vfproj @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/GlueWW3_OBC/GlueWW3_OBC.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/GlueWW3_OBC/GlueWW3_OBC.vfproj new file mode 100644 index 000000000..03befb0be --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/GlueWW3_OBC/GlueWW3_OBC.vfproj @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/HDF5Exporter/HDF5Exporter.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/HDF5Exporter/HDF5Exporter.vfproj new file mode 100644 index 000000000..b8464805f --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/HDF5Exporter/HDF5Exporter.vfproj @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/HDF5Extractor/HDF5Extractor.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/HDF5Extractor/HDF5Extractor.vfproj new file mode 100644 index 000000000..176d7f576 --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/HDF5Extractor/HDF5Extractor.vfproj @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/HDF5Operator/HDF5Operator.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/HDF5Operator/HDF5Operator.vfproj new file mode 100644 index 000000000..3f8c63c4f --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/HDF5Operator/HDF5Operator.vfproj @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/HDF5Statistics/HDF5Statistics.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/HDF5Statistics/HDF5Statistics.vfproj new file mode 100644 index 000000000..38365595f --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/HDF5Statistics/HDF5Statistics.vfproj @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/HDF5_2_EsriGridData/HDF5_2_EsriGridData.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/HDF5_2_EsriGridData/HDF5_2_EsriGridData.vfproj new file mode 100644 index 000000000..f68123bb3 --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/HDF5_2_EsriGridData/HDF5_2_EsriGridData.vfproj @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/HydrodynamicAnalyser/HydrodynamicAnalyser.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/HydrodynamicAnalyser/HydrodynamicAnalyser.vfproj new file mode 100644 index 000000000..1c0ee502e --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/HydrodynamicAnalyser/HydrodynamicAnalyser.vfproj @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/JoinTimeSeries/JoinTimeSeries.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/JoinTimeSeries/JoinTimeSeries.vfproj new file mode 100644 index 000000000..a6b26d342 --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/JoinTimeSeries/JoinTimeSeries.vfproj @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDBase1/MOHIDBase1.common.settings b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDBase1/MOHIDBase1.common.settings new file mode 100644 index 000000000..cd09a64f2 --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDBase1/MOHIDBase1.common.settings @@ -0,0 +1,22 @@ + + + + + true + + + $(TargetPath) + + + + true + + + true + true + + false + false + false + + \ No newline at end of file diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDBase1/MOHIDBase1.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDBase1/MOHIDBase1.vfproj new file mode 100644 index 000000000..d12dacfd0 --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDBase1/MOHIDBase1.vfproj @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDBase1/MOHIDBase1WithCUDA.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDBase1/MOHIDBase1WithCUDA.vfproj new file mode 100644 index 000000000..cbafc03d9 --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDBase1/MOHIDBase1WithCUDA.vfproj @@ -0,0 +1,522 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDBase2/MOHIDBase2.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDBase2/MOHIDBase2.vfproj new file mode 100644 index 000000000..c4adf8915 --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDBase2/MOHIDBase2.vfproj @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDLand/MOHIDLand.common.settings b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDLand/MOHIDLand.common.settings new file mode 100644 index 000000000..8a40c5e83 --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDLand/MOHIDLand.common.settings @@ -0,0 +1,42 @@ + + + + + true + + + $(TargetPath) + + D:\MOHID Projects\MOHID Studio Samples\Trancao Sample\Trancao v2\exe + + true + + + true + true + + false + + + + + + + true + + + $(TargetPath) + + + + true + + + true + true + + false + false + false + + \ No newline at end of file diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDLand/MOHIDLand.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDLand/MOHIDLand.vfproj new file mode 100644 index 000000000..acc6b6ab8 --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDLand/MOHIDLand.vfproj @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDNumerics.sln b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDNumerics.sln new file mode 100644 index 000000000..9b296e1bd --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDNumerics.sln @@ -0,0 +1,421 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28010.2019 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MainSoftware", "MainSoftware", "{10AECD7E-48C8-4C1E-A0C8-ACD15EEB544A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libs", "Libs", "{F4334CCB-92E6-43E4-B5EE-8700A0BE00D5}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{0C2D3D02-FB0B-4A4D-8DA2-A01B104B528B}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "MOHIDLand", "MOHIDLand\MOHIDLand.vfproj", "{8FDBAD87-52D7-4B29-A346-CF6918785077}" + ProjectSection(ProjectDependencies) = postProject + {98ABA093-7927-4BCD-B011-BF409B5BBB78} = {98ABA093-7927-4BCD-B011-BF409B5BBB78} + {0056F7D7-347A-40DE-98B8-843CF05B5488} = {0056F7D7-347A-40DE-98B8-843CF05B5488} + EndProjectSection +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "DigitalTerrainCreator", "CreateDigitalTerrain\DigitalTerrainCreator.vfproj", "{3E94FB51-7A8D-41D7-B945-4435992AE154}" + ProjectSection(ProjectDependencies) = postProject + {98ABA093-7927-4BCD-B011-BF409B5BBB78} = {98ABA093-7927-4BCD-B011-BF409B5BBB78} + {0056F7D7-347A-40DE-98B8-843CF05B5488} = {0056F7D7-347A-40DE-98B8-843CF05B5488} + EndProjectSection +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "MOHIDRiver", "MOHIDRiver\MOHIDRiver.vfproj", "{79B53A56-7C7D-45A2-A951-2106626FDABB}" + ProjectSection(ProjectDependencies) = postProject + {0056F7D7-347A-40DE-98B8-843CF05B5488} = {0056F7D7-347A-40DE-98B8-843CF05B5488} + EndProjectSection +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "BasinDelineator", "BasinDelineator\BasinDelineator.vfproj", "{0FCF0362-5F48-4D9B-BBD8-FD2CA58E83F9}" + ProjectSection(ProjectDependencies) = postProject + {98ABA093-7927-4BCD-B011-BF409B5BBB78} = {98ABA093-7927-4BCD-B011-BF409B5BBB78} + {0056F7D7-347A-40DE-98B8-843CF05B5488} = {0056F7D7-347A-40DE-98B8-843CF05B5488} + EndProjectSection +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "ConvertGridDataToHDF5", "ConvertGridDataToHDF5\ConvertGridDataToHDF5.vfproj", "{4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}" + ProjectSection(ProjectDependencies) = postProject + {98ABA093-7927-4BCD-B011-BF409B5BBB78} = {98ABA093-7927-4BCD-B011-BF409B5BBB78} + {0056F7D7-347A-40DE-98B8-843CF05B5488} = {0056F7D7-347A-40DE-98B8-843CF05B5488} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PhreeqC", "PhreeqC\PhreeqC.vcxproj", "{5AEB2DAA-81F0-439A-8EE0-2148D7045B96}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "DrawFluxesInHDF5", "DrawFluxesInHDF5\DrawFluxesInHDF5.vfproj", "{9DC85AC0-1EAF-42B5-A6D0-28AC10A96D15}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "SmoothBathymNesting", "SmoothBathymNesting\SmoothBathymNesting.vfproj", "{8AAFBBAB-D61C-42EE-8346-67EDA6AAABFA}" + ProjectSection(ProjectDependencies) = postProject + {98ABA093-7927-4BCD-B011-BF409B5BBB78} = {98ABA093-7927-4BCD-B011-BF409B5BBB78} + {0056F7D7-347A-40DE-98B8-843CF05B5488} = {0056F7D7-347A-40DE-98B8-843CF05B5488} + EndProjectSection +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "ConvertHDF5ToGridData", "ConvertHDF5ToGridData\ConvertHDF5ToGridData.vfproj", "{7D60003A-7B07-4DAE-9046-FAB75E690696}" + ProjectSection(ProjectDependencies) = postProject + {98ABA093-7927-4BCD-B011-BF409B5BBB78} = {98ABA093-7927-4BCD-B011-BF409B5BBB78} + {0056F7D7-347A-40DE-98B8-843CF05B5488} = {0056F7D7-347A-40DE-98B8-843CF05B5488} + EndProjectSection +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "Compare2HDFfiles", "Compare2HDFfiles\Compare2HDFfiles.vfproj", "{A2362933-01EF-4E31-914B-C4316A54E065}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "Convert2Hdf5", "Convert2Hdf5\Convert2Hdf5.vfproj", "{A6EDD202-5330-47B5-8E1E-5A98D14AD51A}" + ProjectSection(ProjectDependencies) = postProject + {98ABA093-7927-4BCD-B011-BF409B5BBB78} = {98ABA093-7927-4BCD-B011-BF409B5BBB78} + {0056F7D7-347A-40DE-98B8-843CF05B5488} = {0056F7D7-347A-40DE-98B8-843CF05B5488} + EndProjectSection +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "Convert2netcdf", "Convert2netcdf\Convert2netcdf.vfproj", "{F8708A1A-EF60-4639-BD43-777C769C7864}" + ProjectSection(ProjectDependencies) = postProject + {98ABA093-7927-4BCD-B011-BF409B5BBB78} = {98ABA093-7927-4BCD-B011-BF409B5BBB78} + {0056F7D7-347A-40DE-98B8-843CF05B5488} = {0056F7D7-347A-40DE-98B8-843CF05B5488} + EndProjectSection +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "ConvertToTimeSerie", "ConvertToTimeSerie\ConvertToTimeSerie.vfproj", "{D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "DDCParser", "DDCParser\DDCParser.vfproj", "{29BFD189-F22E-42FD-8E33-4E2436386EB1}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "DDCWorker", "DDCWorker\DDCWorker.vfproj", "{DC527F50-5495-4C75-99DF-82B2CBA215AF}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "DomainConsolidation", "DomainConsolidation\DomainConsolidation.vfproj", "{8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}" + ProjectSection(ProjectDependencies) = postProject + {0056F7D7-347A-40DE-98B8-843CF05B5488} = {0056F7D7-347A-40DE-98B8-843CF05B5488} + EndProjectSection +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "GlueWW3_OBC", "GlueWW3_OBC\GlueWW3_OBC.vfproj", "{8191DDA9-7477-48B2-BF5B-BA58EB81D76E}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "hdf2surfer", "hdf2surfer\hdf2surfer.vfproj", "{C04384BB-3887-4EA3-A9B4-988A0C698396}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "HDF5_2_EsriGridData", "HDF5_2_EsriGridData\HDF5_2_EsriGridData.vfproj", "{B893667E-A60D-4D7E-A1F6-E0D94E8815BB}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "HydrodynamicAnalyser", "HydrodynamicAnalyser\HydrodynamicAnalyser.vfproj", "{B500FAC8-4FC2-433A-8BBF-8D19837060FE}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "HDF5Operator", "HDF5Operator\HDF5Operator.vfproj", "{31718428-0170-4952-924F-1568E2FA72EF}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "Valida4D", "Valida4D\Valida4D.vfproj", "{4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "FillMatrix", "FillMatrix\FillMatrix.vfproj", "{4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "HDF5Exporter", "HDF5Exporter\HDF5Exporter.vfproj", "{BCE54D78-EFF6-4492-86D3-E6EFB49E9083}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "FilterBathymetry", "FilterBathymetry\FilterBathymetry.vfproj", "{8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "HDF5Extractor", "HDF5Extractor\HDF5Extractor.vfproj", "{86CE3A10-4856-40B2-874F-85A47920FC61}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "HDF5Statistics", "HDF5Statistics\HDF5Statistics.vfproj", "{3A41D44C-F6DB-42B4-B98B-57252374202D}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "ConvertToXYZ", "ConvertToXYZ\ConvertToXYZ.vfproj", "{7033A311-58C3-4992-B524-75396846B759}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "MOHIDBase1", "MOHIDBase1\MOHIDBase1.vfproj", "{0056F7D7-347A-40DE-98B8-843CF05B5488}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "MOHIDBase2", "MOHIDBase2\MOHIDBase2.vfproj", "{98ABA093-7927-4BCD-B011-BF409B5BBB78}" + ProjectSection(ProjectDependencies) = postProject + {0056F7D7-347A-40DE-98B8-843CF05B5488} = {0056F7D7-347A-40DE-98B8-843CF05B5488} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OceanColor", "OceanColor\OceanColor.vcxproj", "{C5CF769A-D6B5-4DC8-B39C-734B4D9D685C}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "MOHIDWater", "MOHIDWater\MOHIDWater.vfproj", "{E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}" + ProjectSection(ProjectDependencies) = postProject + {98ABA093-7927-4BCD-B011-BF409B5BBB78} = {98ABA093-7927-4BCD-B011-BF409B5BBB78} + {0056F7D7-347A-40DE-98B8-843CF05B5488} = {0056F7D7-347A-40DE-98B8-843CF05B5488} + EndProjectSection +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "JoinTimeSeries", "JoinTimeSeries\JoinTimeSeries.vfproj", "{FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "TidePrev", "TidePrev\TidePrev.vfproj", "{F58FF19C-6A88-4D99-B587-E6B7752EC103}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug Openmp|x64 = Debug Openmp|x64 + Debug|x64 = Debug|x64 + Release MPI|x64 = Release MPI|x64 + Release OpenMP|x64 = Release OpenMP|x64 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8FDBAD87-52D7-4B29-A346-CF6918785077}.Debug Openmp|x64.ActiveCfg = Debug OpenMP|x64 + {8FDBAD87-52D7-4B29-A346-CF6918785077}.Debug Openmp|x64.Build.0 = Debug OpenMP|x64 + {8FDBAD87-52D7-4B29-A346-CF6918785077}.Debug|x64.ActiveCfg = Debug|x64 + {8FDBAD87-52D7-4B29-A346-CF6918785077}.Debug|x64.Build.0 = Debug|x64 + {8FDBAD87-52D7-4B29-A346-CF6918785077}.Release MPI|x64.ActiveCfg = Release|x64 + {8FDBAD87-52D7-4B29-A346-CF6918785077}.Release MPI|x64.Build.0 = Release|x64 + {8FDBAD87-52D7-4B29-A346-CF6918785077}.Release OpenMP|x64.ActiveCfg = Release OpenMP|x64 + {8FDBAD87-52D7-4B29-A346-CF6918785077}.Release OpenMP|x64.Build.0 = Release OpenMP|x64 + {8FDBAD87-52D7-4B29-A346-CF6918785077}.Release|x64.ActiveCfg = Release|x64 + {8FDBAD87-52D7-4B29-A346-CF6918785077}.Release|x64.Build.0 = Release|x64 + {3E94FB51-7A8D-41D7-B945-4435992AE154}.Debug Openmp|x64.ActiveCfg = Debug MPI|x64 + {3E94FB51-7A8D-41D7-B945-4435992AE154}.Debug Openmp|x64.Build.0 = Debug MPI|x64 + {3E94FB51-7A8D-41D7-B945-4435992AE154}.Debug|x64.ActiveCfg = Debug|x64 + {3E94FB51-7A8D-41D7-B945-4435992AE154}.Release MPI|x64.ActiveCfg = Release MPI|x64 + {3E94FB51-7A8D-41D7-B945-4435992AE154}.Release MPI|x64.Build.0 = Release MPI|x64 + {3E94FB51-7A8D-41D7-B945-4435992AE154}.Release OpenMP|x64.ActiveCfg = Release|x64 + {3E94FB51-7A8D-41D7-B945-4435992AE154}.Release|x64.ActiveCfg = Release|x64 + {3E94FB51-7A8D-41D7-B945-4435992AE154}.Release|x64.Build.0 = Release|x64 + {79B53A56-7C7D-45A2-A951-2106626FDABB}.Debug Openmp|x64.ActiveCfg = Debug|x64 + {79B53A56-7C7D-45A2-A951-2106626FDABB}.Debug Openmp|x64.Build.0 = Debug|x64 + {79B53A56-7C7D-45A2-A951-2106626FDABB}.Debug|x64.ActiveCfg = Debug|x64 + {79B53A56-7C7D-45A2-A951-2106626FDABB}.Debug|x64.Build.0 = Debug|x64 + {79B53A56-7C7D-45A2-A951-2106626FDABB}.Release MPI|x64.ActiveCfg = Release|x64 + {79B53A56-7C7D-45A2-A951-2106626FDABB}.Release MPI|x64.Build.0 = Release|x64 + {79B53A56-7C7D-45A2-A951-2106626FDABB}.Release OpenMP|x64.ActiveCfg = Release OpenMP|x64 + {79B53A56-7C7D-45A2-A951-2106626FDABB}.Release OpenMP|x64.Build.0 = Release OpenMP|x64 + {79B53A56-7C7D-45A2-A951-2106626FDABB}.Release|x64.ActiveCfg = Release|x64 + {79B53A56-7C7D-45A2-A951-2106626FDABB}.Release|x64.Build.0 = Release|x64 + {0FCF0362-5F48-4D9B-BBD8-FD2CA58E83F9}.Debug Openmp|x64.ActiveCfg = Debug Openmp|x64 + {0FCF0362-5F48-4D9B-BBD8-FD2CA58E83F9}.Debug Openmp|x64.Build.0 = Debug Openmp|x64 + {0FCF0362-5F48-4D9B-BBD8-FD2CA58E83F9}.Debug|x64.ActiveCfg = Debug|x64 + {0FCF0362-5F48-4D9B-BBD8-FD2CA58E83F9}.Release MPI|x64.ActiveCfg = Release|x64 + {0FCF0362-5F48-4D9B-BBD8-FD2CA58E83F9}.Release MPI|x64.Build.0 = Release|x64 + {0FCF0362-5F48-4D9B-BBD8-FD2CA58E83F9}.Release OpenMP|x64.ActiveCfg = Release|x64 + {0FCF0362-5F48-4D9B-BBD8-FD2CA58E83F9}.Release OpenMP|x64.Build.0 = Release|x64 + {0FCF0362-5F48-4D9B-BBD8-FD2CA58E83F9}.Release|x64.ActiveCfg = Release|x64 + {0FCF0362-5F48-4D9B-BBD8-FD2CA58E83F9}.Release|x64.Build.0 = Release|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Debug Openmp|x64.ActiveCfg = Debug|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Debug Openmp|x64.Build.0 = Debug|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Debug|x64.ActiveCfg = Debug|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Debug|x64.Build.0 = Debug|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Release MPI|x64.ActiveCfg = Release|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Release MPI|x64.Build.0 = Release|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Release OpenMP|x64.ActiveCfg = Release|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Release OpenMP|x64.Build.0 = Release|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Release|x64.ActiveCfg = Release|x64 + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA}.Release|x64.Build.0 = Release|x64 + {5AEB2DAA-81F0-439A-8EE0-2148D7045B96}.Debug Openmp|x64.ActiveCfg = Debug|Win32 + {5AEB2DAA-81F0-439A-8EE0-2148D7045B96}.Debug|x64.ActiveCfg = Debug|x64 + {5AEB2DAA-81F0-439A-8EE0-2148D7045B96}.Release MPI|x64.ActiveCfg = Release|x64 + {5AEB2DAA-81F0-439A-8EE0-2148D7045B96}.Release OpenMP|x64.ActiveCfg = Release|x64 + {5AEB2DAA-81F0-439A-8EE0-2148D7045B96}.Release|x64.ActiveCfg = Release|x64 + {5AEB2DAA-81F0-439A-8EE0-2148D7045B96}.Release|x64.Build.0 = Release|x64 + {9DC85AC0-1EAF-42B5-A6D0-28AC10A96D15}.Debug Openmp|x64.ActiveCfg = Debug|x64 + {9DC85AC0-1EAF-42B5-A6D0-28AC10A96D15}.Debug Openmp|x64.Build.0 = Debug|x64 + {9DC85AC0-1EAF-42B5-A6D0-28AC10A96D15}.Debug|x64.ActiveCfg = Debug|x64 + {9DC85AC0-1EAF-42B5-A6D0-28AC10A96D15}.Release MPI|x64.ActiveCfg = Release|x64 + {9DC85AC0-1EAF-42B5-A6D0-28AC10A96D15}.Release OpenMP|x64.ActiveCfg = Release|x64 + {9DC85AC0-1EAF-42B5-A6D0-28AC10A96D15}.Release|x64.ActiveCfg = Release|x64 + {8AAFBBAB-D61C-42EE-8346-67EDA6AAABFA}.Debug Openmp|x64.ActiveCfg = Debug|x64 + {8AAFBBAB-D61C-42EE-8346-67EDA6AAABFA}.Debug|x64.ActiveCfg = Debug|x64 + {8AAFBBAB-D61C-42EE-8346-67EDA6AAABFA}.Release MPI|x64.ActiveCfg = Release|x64 + {8AAFBBAB-D61C-42EE-8346-67EDA6AAABFA}.Release OpenMP|x64.ActiveCfg = Release|x64 + {8AAFBBAB-D61C-42EE-8346-67EDA6AAABFA}.Release|x64.ActiveCfg = Release|x64 + {8AAFBBAB-D61C-42EE-8346-67EDA6AAABFA}.Release|x64.Build.0 = Release|x64 + {7D60003A-7B07-4DAE-9046-FAB75E690696}.Debug Openmp|x64.ActiveCfg = Debug|x64 + {7D60003A-7B07-4DAE-9046-FAB75E690696}.Debug Openmp|x64.Build.0 = Debug|x64 + {7D60003A-7B07-4DAE-9046-FAB75E690696}.Debug|x64.ActiveCfg = Debug|x64 + {7D60003A-7B07-4DAE-9046-FAB75E690696}.Release MPI|x64.ActiveCfg = Release|x64 + {7D60003A-7B07-4DAE-9046-FAB75E690696}.Release OpenMP|x64.ActiveCfg = Release|x64 + {7D60003A-7B07-4DAE-9046-FAB75E690696}.Release OpenMP|x64.Build.0 = Release|x64 + {7D60003A-7B07-4DAE-9046-FAB75E690696}.Release|x64.ActiveCfg = Release|x64 + {7D60003A-7B07-4DAE-9046-FAB75E690696}.Release|x64.Build.0 = Release|x64 + {A2362933-01EF-4E31-914B-C4316A54E065}.Debug Openmp|x64.ActiveCfg = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Debug Openmp|x64.Build.0 = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Debug|x64.ActiveCfg = Debug|x64 + {A2362933-01EF-4E31-914B-C4316A54E065}.Release MPI|x64.ActiveCfg = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Release MPI|x64.Build.0 = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Release OpenMP|x64.ActiveCfg = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Release OpenMP|x64.Build.0 = Release|Win32 + {A2362933-01EF-4E31-914B-C4316A54E065}.Release|x64.ActiveCfg = Release|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Debug Openmp|x64.ActiveCfg = Release|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Debug Openmp|x64.Build.0 = Release|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Debug|x64.ActiveCfg = Debug|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Debug|x64.Build.0 = Debug|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Release MPI|x64.ActiveCfg = Release MPI|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Release OpenMP|x64.ActiveCfg = Release|x64 + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A}.Release|x64.ActiveCfg = Release|x64 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Debug Openmp|x64.ActiveCfg = Debug|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Debug|x64.ActiveCfg = Debug|x64 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Release MPI|x64.ActiveCfg = Release|x64 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Release OpenMP|x64.ActiveCfg = Release|Win32 + {F8708A1A-EF60-4639-BD43-777C769C7864}.Release|x64.ActiveCfg = Release|x64 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Debug Openmp|x64.ActiveCfg = Debug|Win32 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Debug|x64.ActiveCfg = Debug|x64 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Release MPI|x64.ActiveCfg = Release|x64 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Release OpenMP|x64.ActiveCfg = Release|x64 + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6}.Release|x64.ActiveCfg = Release|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Debug Openmp|x64.ActiveCfg = Debug|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Debug Openmp|x64.Build.0 = Debug|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Debug|x64.ActiveCfg = Debug|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Release MPI|x64.ActiveCfg = Release|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Release MPI|x64.Build.0 = Release|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Release OpenMP|x64.ActiveCfg = Release|x64 + {29BFD189-F22E-42FD-8E33-4E2436386EB1}.Release|x64.ActiveCfg = Release|x64 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Debug Openmp|x64.ActiveCfg = Debug|x64 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Debug Openmp|x64.Build.0 = Debug|x64 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Debug|x64.ActiveCfg = Debug|x64 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Release MPI|x64.ActiveCfg = Release|x64 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Release OpenMP|x64.ActiveCfg = Release|x64 + {DC527F50-5495-4C75-99DF-82B2CBA215AF}.Release|x64.ActiveCfg = Release|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Debug Openmp|x64.ActiveCfg = Debug MPI|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Debug Openmp|x64.Build.0 = Debug MPI|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Debug|x64.ActiveCfg = Debug|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Release MPI|x64.ActiveCfg = Release MPI|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Release OpenMP|x64.ActiveCfg = Release|x64 + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20}.Release|x64.ActiveCfg = Release|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Debug Openmp|x64.ActiveCfg = Debug MPI|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Debug Openmp|x64.Build.0 = Debug MPI|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Debug|x64.ActiveCfg = Debug|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Debug|x64.Build.0 = Debug|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Release MPI|x64.ActiveCfg = Release MPI|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Release OpenMP|x64.ActiveCfg = Release|x64 + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E}.Release|x64.ActiveCfg = Release|x64 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Debug Openmp|x64.ActiveCfg = Debug|x64 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Debug Openmp|x64.Build.0 = Debug|x64 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Debug|x64.ActiveCfg = Debug|x64 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Release MPI|x64.ActiveCfg = Release|Win32 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Release OpenMP|x64.ActiveCfg = Release|x64 + {C04384BB-3887-4EA3-A9B4-988A0C698396}.Release|x64.ActiveCfg = Release|x64 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Debug Openmp|x64.ActiveCfg = Debug|x64 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Debug|x64.ActiveCfg = Debug|x64 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Debug|x64.Build.0 = Debug|x64 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Release MPI|x64.ActiveCfg = Release|Win32 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Release OpenMP|x64.ActiveCfg = Release|x64 + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB}.Release|x64.ActiveCfg = Release|x64 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Debug Openmp|x64.ActiveCfg = Debug|x64 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Debug Openmp|x64.Build.0 = Debug|x64 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Debug|x64.ActiveCfg = Debug|x64 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Release MPI|x64.ActiveCfg = Release|Win32 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Release OpenMP|x64.ActiveCfg = Release|Win32 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Release|x64.ActiveCfg = Release|x64 + {B500FAC8-4FC2-433A-8BBF-8D19837060FE}.Release|x64.Build.0 = Release|x64 + {31718428-0170-4952-924F-1568E2FA72EF}.Debug Openmp|x64.ActiveCfg = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Debug Openmp|x64.Build.0 = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Debug|x64.ActiveCfg = Debug|x64 + {31718428-0170-4952-924F-1568E2FA72EF}.Release MPI|x64.ActiveCfg = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Release MPI|x64.Build.0 = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Release OpenMP|x64.ActiveCfg = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Release OpenMP|x64.Build.0 = Release|Win32 + {31718428-0170-4952-924F-1568E2FA72EF}.Release|x64.ActiveCfg = Release|x64 + {31718428-0170-4952-924F-1568E2FA72EF}.Release|x64.Build.0 = Release|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Debug Openmp|x64.ActiveCfg = Debug MPI|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Debug Openmp|x64.Build.0 = Debug MPI|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Debug|x64.ActiveCfg = Debug|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Release MPI|x64.ActiveCfg = Release MPI|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Release OpenMP|x64.ActiveCfg = Release|x64 + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81}.Release|x64.ActiveCfg = Release|x64 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Debug Openmp|x64.ActiveCfg = Debug|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Debug|x64.ActiveCfg = Debug|x64 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Release MPI|x64.ActiveCfg = Release|Win32 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Release OpenMP|x64.ActiveCfg = Release|x64 + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A}.Release|x64.ActiveCfg = Release|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Debug Openmp|x64.ActiveCfg = Debug|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Debug Openmp|x64.Build.0 = Debug|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Debug|x64.ActiveCfg = Debug|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Debug|x64.Build.0 = Debug|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Release MPI|x64.ActiveCfg = Release|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Release MPI|x64.Build.0 = Release|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Release OpenMP|x64.ActiveCfg = Release|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Release OpenMP|x64.Build.0 = Release|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Release|x64.ActiveCfg = Release|x64 + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083}.Release|x64.Build.0 = Release|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Debug Openmp|x64.ActiveCfg = Debug MPI|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Debug Openmp|x64.Build.0 = Debug MPI|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Debug|x64.ActiveCfg = Debug|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Release MPI|x64.ActiveCfg = Release MPI|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Release OpenMP|x64.ActiveCfg = Release|x64 + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3}.Release|x64.ActiveCfg = Release|x64 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Debug Openmp|x64.ActiveCfg = Debug MPI|x64 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Debug Openmp|x64.Build.0 = Debug MPI|x64 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Debug|x64.ActiveCfg = Debug|x64 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Release MPI|x64.ActiveCfg = Release MPI|x64 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Release OpenMP|x64.ActiveCfg = Release|Win32 + {86CE3A10-4856-40B2-874F-85A47920FC61}.Release|x64.ActiveCfg = Release|x64 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Debug Openmp|x64.ActiveCfg = Debug|x64 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Debug|x64.ActiveCfg = Debug|x64 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Release MPI|x64.ActiveCfg = Release|Win32 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Release OpenMP|x64.ActiveCfg = Release|Win32 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Release|x64.ActiveCfg = Release|x64 + {3A41D44C-F6DB-42B4-B98B-57252374202D}.Release|x64.Build.0 = Release|x64 + {7033A311-58C3-4992-B524-75396846B759}.Debug Openmp|x64.ActiveCfg = Debug|x64 + {7033A311-58C3-4992-B524-75396846B759}.Debug Openmp|x64.Build.0 = Debug|x64 + {7033A311-58C3-4992-B524-75396846B759}.Debug|x64.ActiveCfg = Debug|x64 + {7033A311-58C3-4992-B524-75396846B759}.Release MPI|x64.ActiveCfg = Release|x64 + {7033A311-58C3-4992-B524-75396846B759}.Release OpenMP|x64.ActiveCfg = Release|x64 + {7033A311-58C3-4992-B524-75396846B759}.Release|x64.ActiveCfg = Release|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug Openmp|x64.ActiveCfg = Debug|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug Openmp|x64.Build.0 = Debug|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug|x64.ActiveCfg = Debug|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug|x64.Build.0 = Debug|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release MPI|x64.ActiveCfg = Release MPI|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release MPI|x64.Build.0 = Release MPI|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release OpenMP|x64.ActiveCfg = Release OpenMP|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release OpenMP|x64.Build.0 = Release OpenMP|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release|x64.ActiveCfg = Release|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release|x64.Build.0 = Release|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug Openmp|x64.ActiveCfg = Debug|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug Openmp|x64.Build.0 = Debug|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug|x64.ActiveCfg = Debug|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug|x64.Build.0 = Debug|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release MPI|x64.ActiveCfg = Release MPI|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release MPI|x64.Build.0 = Release MPI|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release OpenMP|x64.ActiveCfg = Release OpenMP|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release OpenMP|x64.Build.0 = Release OpenMP|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release|x64.ActiveCfg = Release|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release|x64.Build.0 = Release|x64 + {C5CF769A-D6B5-4DC8-B39C-734B4D9D685C}.Debug Openmp|x64.ActiveCfg = Release|Win32 + {C5CF769A-D6B5-4DC8-B39C-734B4D9D685C}.Debug|x64.ActiveCfg = Debug|Win32 + {C5CF769A-D6B5-4DC8-B39C-734B4D9D685C}.Release MPI|x64.ActiveCfg = Release|Win32 + {C5CF769A-D6B5-4DC8-B39C-734B4D9D685C}.Release OpenMP|x64.ActiveCfg = Release|Win32 + {C5CF769A-D6B5-4DC8-B39C-734B4D9D685C}.Release|x64.ActiveCfg = Release|Win32 + {C5CF769A-D6B5-4DC8-B39C-734B4D9D685C}.Release|x64.Build.0 = Release|Win32 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Debug Openmp|x64.ActiveCfg = Debug OpenMP|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Debug Openmp|x64.Build.0 = Debug OpenMP|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Debug|x64.ActiveCfg = Debug|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Debug|x64.Build.0 = Debug|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Release MPI|x64.ActiveCfg = Release MPI|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Release MPI|x64.Build.0 = Release MPI|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Release OpenMP|x64.ActiveCfg = Release OpenMP|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Release OpenMP|x64.Build.0 = Release OpenMP|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Release|x64.ActiveCfg = Release|x64 + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5}.Release|x64.Build.0 = Release|x64 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Debug Openmp|x64.ActiveCfg = Debug|x64 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Debug|x64.ActiveCfg = Debug|x64 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Release MPI|x64.ActiveCfg = Release|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Release OpenMP|x64.ActiveCfg = Release|Win32 + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3}.Release|x64.ActiveCfg = Release|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Debug Openmp|x64.ActiveCfg = Debug MPI|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Debug Openmp|x64.Build.0 = Debug MPI|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Debug|x64.ActiveCfg = Debug|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Release MPI|x64.ActiveCfg = Release MPI|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Release OpenMP|x64.ActiveCfg = Release|x64 + {F58FF19C-6A88-4D99-B587-E6B7752EC103}.Release|x64.ActiveCfg = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {8FDBAD87-52D7-4B29-A346-CF6918785077} = {10AECD7E-48C8-4C1E-A0C8-ACD15EEB544A} + {3E94FB51-7A8D-41D7-B945-4435992AE154} = {0C2D3D02-FB0B-4A4D-8DA2-A01B104B528B} + {79B53A56-7C7D-45A2-A951-2106626FDABB} = {10AECD7E-48C8-4C1E-A0C8-ACD15EEB544A} + {0FCF0362-5F48-4D9B-BBD8-FD2CA58E83F9} = {0C2D3D02-FB0B-4A4D-8DA2-A01B104B528B} + {4831291D-0227-4FEB-9A09-0BD2A1E5B8EA} = {0C2D3D02-FB0B-4A4D-8DA2-A01B104B528B} + {5AEB2DAA-81F0-439A-8EE0-2148D7045B96} = {F4334CCB-92E6-43E4-B5EE-8700A0BE00D5} + {9DC85AC0-1EAF-42B5-A6D0-28AC10A96D15} = {0C2D3D02-FB0B-4A4D-8DA2-A01B104B528B} + {8AAFBBAB-D61C-42EE-8346-67EDA6AAABFA} = {0C2D3D02-FB0B-4A4D-8DA2-A01B104B528B} + {7D60003A-7B07-4DAE-9046-FAB75E690696} = {0C2D3D02-FB0B-4A4D-8DA2-A01B104B528B} + {A2362933-01EF-4E31-914B-C4316A54E065} = {0C2D3D02-FB0B-4A4D-8DA2-A01B104B528B} + {A6EDD202-5330-47B5-8E1E-5A98D14AD51A} = {0C2D3D02-FB0B-4A4D-8DA2-A01B104B528B} + {F8708A1A-EF60-4639-BD43-777C769C7864} = {0C2D3D02-FB0B-4A4D-8DA2-A01B104B528B} + {D9A8E2CF-4DA2-4210-BDF7-05F2A281FCA6} = {0C2D3D02-FB0B-4A4D-8DA2-A01B104B528B} + {29BFD189-F22E-42FD-8E33-4E2436386EB1} = {0C2D3D02-FB0B-4A4D-8DA2-A01B104B528B} + {DC527F50-5495-4C75-99DF-82B2CBA215AF} = {0C2D3D02-FB0B-4A4D-8DA2-A01B104B528B} + {8C4AD1E5-2DA6-4B02-9D25-3827BD0DEC20} = {0C2D3D02-FB0B-4A4D-8DA2-A01B104B528B} + {8191DDA9-7477-48B2-BF5B-BA58EB81D76E} = {0C2D3D02-FB0B-4A4D-8DA2-A01B104B528B} + {C04384BB-3887-4EA3-A9B4-988A0C698396} = {0C2D3D02-FB0B-4A4D-8DA2-A01B104B528B} + {B893667E-A60D-4D7E-A1F6-E0D94E8815BB} = {0C2D3D02-FB0B-4A4D-8DA2-A01B104B528B} + {B500FAC8-4FC2-433A-8BBF-8D19837060FE} = {0C2D3D02-FB0B-4A4D-8DA2-A01B104B528B} + {31718428-0170-4952-924F-1568E2FA72EF} = {0C2D3D02-FB0B-4A4D-8DA2-A01B104B528B} + {4D908B30-D0CA-4CBE-AB33-1BE87F4C8A81} = {0C2D3D02-FB0B-4A4D-8DA2-A01B104B528B} + {4BB5832C-53C3-4226-BBDA-584B4EEBBC2A} = {0C2D3D02-FB0B-4A4D-8DA2-A01B104B528B} + {BCE54D78-EFF6-4492-86D3-E6EFB49E9083} = {0C2D3D02-FB0B-4A4D-8DA2-A01B104B528B} + {8F12330D-0DDF-427D-AE70-1F2A9F7A49D3} = {0C2D3D02-FB0B-4A4D-8DA2-A01B104B528B} + {86CE3A10-4856-40B2-874F-85A47920FC61} = {0C2D3D02-FB0B-4A4D-8DA2-A01B104B528B} + {3A41D44C-F6DB-42B4-B98B-57252374202D} = {0C2D3D02-FB0B-4A4D-8DA2-A01B104B528B} + {7033A311-58C3-4992-B524-75396846B759} = {0C2D3D02-FB0B-4A4D-8DA2-A01B104B528B} + {0056F7D7-347A-40DE-98B8-843CF05B5488} = {F4334CCB-92E6-43E4-B5EE-8700A0BE00D5} + {98ABA093-7927-4BCD-B011-BF409B5BBB78} = {F4334CCB-92E6-43E4-B5EE-8700A0BE00D5} + {C5CF769A-D6B5-4DC8-B39C-734B4D9D685C} = {F4334CCB-92E6-43E4-B5EE-8700A0BE00D5} + {E7F5B24F-13BA-4864-82FF-4BFBBD13A8B5} = {10AECD7E-48C8-4C1E-A0C8-ACD15EEB544A} + {FC3EC4C8-E66F-4B9D-98A0-631EDD72F9B3} = {0C2D3D02-FB0B-4A4D-8DA2-A01B104B528B} + {F58FF19C-6A88-4D99-B587-E6B7752EC103} = {0C2D3D02-FB0B-4A4D-8DA2-A01B104B528B} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {DBD283F2-BC8B-4DED-91FE-D0704DE6A05D} + EndGlobalSection +EndGlobal diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDNumericsWithOpenMI.sln b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDNumericsWithOpenMI.sln new file mode 100644 index 000000000..d691913c8 --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDNumericsWithOpenMI.sln @@ -0,0 +1,498 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libs", "Libs", "{F4334CCB-92E6-43E4-B5EE-8700A0BE00D5}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Models", "Models", "{0D0BF81E-1A01-4C95-9B1B-C34B980904CC}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "MOHIDBase1", "MOHIDBase1\MOHIDBase1.vfproj", "{0056F7D7-347A-40DE-98B8-843CF05B5488}" +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "MOHIDBase2", "MOHIDBase2\MOHIDBase2.vfproj", "{98ABA093-7927-4BCD-B011-BF409B5BBB78}" + ProjectSection(ProjectDependencies) = postProject + {0056F7D7-347A-40DE-98B8-843CF05B5488} = {0056F7D7-347A-40DE-98B8-843CF05B5488} + EndProjectSection +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "MohidLandEngine", "MohidLandEngine\MohidLandEngine.vfproj", "{473D1747-A62F-4AC5-B0F9-86DDACDA370E}" + ProjectSection(ProjectDependencies) = postProject + {98ABA093-7927-4BCD-B011-BF409B5BBB78} = {98ABA093-7927-4BCD-B011-BF409B5BBB78} + {0056F7D7-347A-40DE-98B8-843CF05B5488} = {0056F7D7-347A-40DE-98B8-843CF05B5488} + EndProjectSection +EndProject +Project("{6989167D-11E4-40FE-8C1A-2192A86A7E90}") = "MohidWaterEngine", "MOHIDWaterEngine\MohidWaterEngine.vfproj", "{0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}" + ProjectSection(ProjectDependencies) = postProject + {98ABA093-7927-4BCD-B011-BF409B5BBB78} = {98ABA093-7927-4BCD-B011-BF409B5BBB78} + {0056F7D7-347A-40DE-98B8-843CF05B5488} = {0056F7D7-347A-40DE-98B8-843CF05B5488} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug Double OpenMI|Any CPU = Debug Double OpenMI|Any CPU + Debug Double OpenMI|Mixed Platforms = Debug Double OpenMI|Mixed Platforms + Debug Double OpenMI|Win32 = Debug Double OpenMI|Win32 + Debug Double OpenMI|x64 = Debug Double OpenMI|x64 + Debug Double Openmp|Any CPU = Debug Double Openmp|Any CPU + Debug Double Openmp|Mixed Platforms = Debug Double Openmp|Mixed Platforms + Debug Double Openmp|Win32 = Debug Double Openmp|Win32 + Debug Double Openmp|x64 = Debug Double Openmp|x64 + Debug Double PhreeqC|Any CPU = Debug Double PhreeqC|Any CPU + Debug Double PhreeqC|Mixed Platforms = Debug Double PhreeqC|Mixed Platforms + Debug Double PhreeqC|Win32 = Debug Double PhreeqC|Win32 + Debug Double PhreeqC|x64 = Debug Double PhreeqC|x64 + Debug Double|Any CPU = Debug Double|Any CPU + Debug Double|Mixed Platforms = Debug Double|Mixed Platforms + Debug Double|Win32 = Debug Double|Win32 + Debug Double|x64 = Debug Double|x64 + Debug OpenMI|Any CPU = Debug OpenMI|Any CPU + Debug OpenMI|Mixed Platforms = Debug OpenMI|Mixed Platforms + Debug OpenMI|Win32 = Debug OpenMI|Win32 + Debug OpenMI|x64 = Debug OpenMI|x64 + Debug OpenMP|Any CPU = Debug OpenMP|Any CPU + Debug OpenMP|Mixed Platforms = Debug OpenMP|Mixed Platforms + Debug OpenMP|Win32 = Debug OpenMP|Win32 + Debug OpenMP|x64 = Debug OpenMP|x64 + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release Double OpenMI|Any CPU = Release Double OpenMI|Any CPU + Release Double OpenMI|Mixed Platforms = Release Double OpenMI|Mixed Platforms + Release Double OpenMI|Win32 = Release Double OpenMI|Win32 + Release Double OpenMI|x64 = Release Double OpenMI|x64 + Release Double OpenMP PhreeqC|Any CPU = Release Double OpenMP PhreeqC|Any CPU + Release Double OpenMP PhreeqC|Mixed Platforms = Release Double OpenMP PhreeqC|Mixed Platforms + Release Double OpenMP PhreeqC|Win32 = Release Double OpenMP PhreeqC|Win32 + Release Double OpenMP PhreeqC|x64 = Release Double OpenMP PhreeqC|x64 + Release Double OpenMP|Any CPU = Release Double OpenMP|Any CPU + Release Double OpenMP|Mixed Platforms = Release Double OpenMP|Mixed Platforms + Release Double OpenMP|Win32 = Release Double OpenMP|Win32 + Release Double OpenMP|x64 = Release Double OpenMP|x64 + Release Double|Any CPU = Release Double|Any CPU + Release Double|Mixed Platforms = Release Double|Mixed Platforms + Release Double|Win32 = Release Double|Win32 + Release Double|x64 = Release Double|x64 + Release MPI|Any CPU = Release MPI|Any CPU + Release MPI|Mixed Platforms = Release MPI|Mixed Platforms + Release MPI|Win32 = Release MPI|Win32 + Release MPI|x64 = Release MPI|x64 + Release OpenMI|Any CPU = Release OpenMI|Any CPU + Release OpenMI|Mixed Platforms = Release OpenMI|Mixed Platforms + Release OpenMI|Win32 = Release OpenMI|Win32 + Release OpenMI|x64 = Release OpenMI|x64 + Release OpenMP|Any CPU = Release OpenMP|Any CPU + Release OpenMP|Mixed Platforms = Release OpenMP|Mixed Platforms + Release OpenMP|Win32 = Release OpenMP|Win32 + Release OpenMP|x64 = Release OpenMP|x64 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug Double OpenMI|Any CPU.ActiveCfg = Debug OpenMI|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug Double OpenMI|Mixed Platforms.ActiveCfg = Debug OpenMI|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug Double OpenMI|Mixed Platforms.Build.0 = Debug OpenMI|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug Double OpenMI|Win32.ActiveCfg = Debug Double OpenMI|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug Double OpenMI|Win32.Build.0 = Debug Double OpenMI|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug Double OpenMI|x64.ActiveCfg = Debug Double OpenMI|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug Double OpenMI|x64.Build.0 = Debug Double OpenMI|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug Double Openmp|Any CPU.ActiveCfg = Debug Double Openmp|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug Double Openmp|Mixed Platforms.ActiveCfg = Debug Double Openmp|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug Double Openmp|Mixed Platforms.Build.0 = Debug Double Openmp|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug Double Openmp|Win32.ActiveCfg = Debug Double Openmp|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug Double Openmp|Win32.Build.0 = Debug Double Openmp|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug Double Openmp|x64.ActiveCfg = Debug Double Openmp|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug Double Openmp|x64.Build.0 = Debug Double Openmp|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug Double PhreeqC|Any CPU.ActiveCfg = Debug Double PhreeqC|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug Double PhreeqC|Mixed Platforms.ActiveCfg = Debug Double PhreeqC|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug Double PhreeqC|Mixed Platforms.Build.0 = Debug Double PhreeqC|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug Double PhreeqC|Win32.ActiveCfg = Debug Double PhreeqC|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug Double PhreeqC|Win32.Build.0 = Debug Double PhreeqC|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug Double PhreeqC|x64.ActiveCfg = Debug Double PhreeqC|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug Double PhreeqC|x64.Build.0 = Debug Double PhreeqC|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug Double|Any CPU.ActiveCfg = Debug Double|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug Double|Mixed Platforms.ActiveCfg = Debug Double|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug Double|Mixed Platforms.Build.0 = Debug Double|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug Double|Win32.ActiveCfg = Debug Double|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug Double|Win32.Build.0 = Debug Double|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug Double|x64.ActiveCfg = Debug Double|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug Double|x64.Build.0 = Debug Double|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug OpenMI|Any CPU.ActiveCfg = Debug OpenMI|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug OpenMI|Mixed Platforms.ActiveCfg = Debug OpenMI|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug OpenMI|Mixed Platforms.Build.0 = Debug OpenMI|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug OpenMI|Win32.ActiveCfg = Debug OpenMI|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug OpenMI|Win32.Build.0 = Debug OpenMI|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug OpenMI|x64.ActiveCfg = Debug OpenMI|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug OpenMI|x64.Build.0 = Debug OpenMI|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug OpenMP|Any CPU.ActiveCfg = Debug OpenMP|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug OpenMP|Mixed Platforms.ActiveCfg = Debug OpenMP|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug OpenMP|Mixed Platforms.Build.0 = Debug OpenMP|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug OpenMP|Win32.ActiveCfg = Debug OpenMP|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug OpenMP|Win32.Build.0 = Debug OpenMP|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug OpenMP|x64.ActiveCfg = Debug OpenMP|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug OpenMP|x64.Build.0 = Debug OpenMP|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug|Win32.ActiveCfg = Debug|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug|Win32.Build.0 = Debug|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug|x64.ActiveCfg = Debug|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Debug|x64.Build.0 = Debug|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release Double OpenMI|Any CPU.ActiveCfg = Release Double OpenMI|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release Double OpenMI|Mixed Platforms.ActiveCfg = Release Double OpenMI|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release Double OpenMI|Mixed Platforms.Build.0 = Release Double OpenMI|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release Double OpenMI|Win32.ActiveCfg = Release Double OpenMI|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release Double OpenMI|Win32.Build.0 = Release Double OpenMI|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release Double OpenMI|x64.ActiveCfg = Release Double OpenMI|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release Double OpenMI|x64.Build.0 = Release Double OpenMI|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release Double OpenMP PhreeqC|Any CPU.ActiveCfg = Release Double OpenMP PhreeqC|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release Double OpenMP PhreeqC|Mixed Platforms.ActiveCfg = Release Double OpenMP PhreeqC|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release Double OpenMP PhreeqC|Mixed Platforms.Build.0 = Release Double OpenMP PhreeqC|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release Double OpenMP PhreeqC|Win32.ActiveCfg = Release Double OpenMP PhreeqC|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release Double OpenMP PhreeqC|Win32.Build.0 = Release Double OpenMP PhreeqC|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release Double OpenMP PhreeqC|x64.ActiveCfg = Release Double OpenMP PhreeqC|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release Double OpenMP PhreeqC|x64.Build.0 = Release Double OpenMP PhreeqC|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release Double OpenMP|Any CPU.ActiveCfg = Release Double OpenMP|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release Double OpenMP|Mixed Platforms.ActiveCfg = Release Double OpenMP|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release Double OpenMP|Mixed Platforms.Build.0 = Release Double OpenMP|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release Double OpenMP|Win32.ActiveCfg = Release Double OpenMP|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release Double OpenMP|Win32.Build.0 = Release Double OpenMP|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release Double OpenMP|x64.ActiveCfg = Release Double OpenMP|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release Double OpenMP|x64.Build.0 = Release Double OpenMP|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release Double|Any CPU.ActiveCfg = Release Double|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release Double|Mixed Platforms.ActiveCfg = Release Double|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release Double|Mixed Platforms.Build.0 = Release Double|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release Double|Win32.ActiveCfg = Release Double|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release Double|Win32.Build.0 = Release Double|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release Double|x64.ActiveCfg = Release Double|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release Double|x64.Build.0 = Release Double|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release MPI|Any CPU.ActiveCfg = Release MPI|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release MPI|Mixed Platforms.ActiveCfg = Release MPI|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release MPI|Mixed Platforms.Build.0 = Release MPI|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release MPI|Win32.ActiveCfg = Release MPI|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release MPI|Win32.Build.0 = Release MPI|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release MPI|x64.ActiveCfg = Release MPI|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release MPI|x64.Build.0 = Release MPI|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release OpenMI|Any CPU.ActiveCfg = Release OpenMI|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release OpenMI|Mixed Platforms.ActiveCfg = Release OpenMI|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release OpenMI|Mixed Platforms.Build.0 = Release OpenMI|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release OpenMI|Win32.ActiveCfg = Release OpenMI|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release OpenMI|Win32.Build.0 = Release OpenMI|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release OpenMI|x64.ActiveCfg = Release OpenMI|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release OpenMI|x64.Build.0 = Release OpenMI|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release OpenMP|Any CPU.ActiveCfg = Release OpenMP|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release OpenMP|Mixed Platforms.ActiveCfg = Release OpenMP|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release OpenMP|Mixed Platforms.Build.0 = Release OpenMP|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release OpenMP|Win32.ActiveCfg = Release OpenMP|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release OpenMP|Win32.Build.0 = Release OpenMP|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release OpenMP|x64.ActiveCfg = Release OpenMP|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release OpenMP|x64.Build.0 = Release OpenMP|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release|Any CPU.ActiveCfg = Release|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release|Mixed Platforms.Build.0 = Release|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release|Win32.ActiveCfg = Release|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release|Win32.Build.0 = Release|Win32 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release|x64.ActiveCfg = Release|x64 + {0056F7D7-347A-40DE-98B8-843CF05B5488}.Release|x64.Build.0 = Release|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug Double OpenMI|Any CPU.ActiveCfg = Debug OpenMI|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug Double OpenMI|Mixed Platforms.ActiveCfg = Debug OpenMI|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug Double OpenMI|Mixed Platforms.Build.0 = Debug OpenMI|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug Double OpenMI|Win32.ActiveCfg = Debug Double OpenMI|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug Double OpenMI|Win32.Build.0 = Debug Double OpenMI|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug Double OpenMI|x64.ActiveCfg = Debug Double OpenMI|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug Double OpenMI|x64.Build.0 = Debug Double OpenMI|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug Double Openmp|Any CPU.ActiveCfg = Debug Double Openmp|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug Double Openmp|Mixed Platforms.ActiveCfg = Debug Double Openmp|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug Double Openmp|Mixed Platforms.Build.0 = Debug Double Openmp|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug Double Openmp|Win32.ActiveCfg = Debug Double Openmp|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug Double Openmp|Win32.Build.0 = Debug Double Openmp|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug Double Openmp|x64.ActiveCfg = Debug Double Openmp|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug Double Openmp|x64.Build.0 = Debug Double Openmp|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug Double PhreeqC|Any CPU.ActiveCfg = Debug Double PhreeqC|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug Double PhreeqC|Mixed Platforms.ActiveCfg = Debug Double PhreeqC|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug Double PhreeqC|Mixed Platforms.Build.0 = Debug Double PhreeqC|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug Double PhreeqC|Win32.ActiveCfg = Debug Double PhreeqC|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug Double PhreeqC|Win32.Build.0 = Debug Double PhreeqC|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug Double PhreeqC|x64.ActiveCfg = Debug Double PhreeqC|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug Double PhreeqC|x64.Build.0 = Debug Double PhreeqC|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug Double|Any CPU.ActiveCfg = Debug Double|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug Double|Mixed Platforms.ActiveCfg = Debug Double|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug Double|Mixed Platforms.Build.0 = Debug Double|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug Double|Win32.ActiveCfg = Debug Double|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug Double|Win32.Build.0 = Debug Double|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug Double|x64.ActiveCfg = Debug Double|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug Double|x64.Build.0 = Debug Double|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug OpenMI|Any CPU.ActiveCfg = Debug OpenMI|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug OpenMI|Mixed Platforms.ActiveCfg = Debug OpenMI|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug OpenMI|Mixed Platforms.Build.0 = Debug OpenMI|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug OpenMI|Win32.ActiveCfg = Debug OpenMI|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug OpenMI|Win32.Build.0 = Debug OpenMI|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug OpenMI|x64.ActiveCfg = Debug OpenMI|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug OpenMI|x64.Build.0 = Debug OpenMI|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug OpenMP|Any CPU.ActiveCfg = Debug OpenMP|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug OpenMP|Mixed Platforms.ActiveCfg = Debug OpenMP|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug OpenMP|Mixed Platforms.Build.0 = Debug OpenMP|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug OpenMP|Win32.ActiveCfg = Debug OpenMP|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug OpenMP|Win32.Build.0 = Debug OpenMP|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug OpenMP|x64.ActiveCfg = Debug OpenMP|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug OpenMP|x64.Build.0 = Debug OpenMP|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug|Win32.ActiveCfg = Debug|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug|Win32.Build.0 = Debug|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug|x64.ActiveCfg = Debug|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Debug|x64.Build.0 = Debug|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release Double OpenMI|Any CPU.ActiveCfg = Release Double OpenMI|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release Double OpenMI|Mixed Platforms.ActiveCfg = Release Double OpenMI|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release Double OpenMI|Mixed Platforms.Build.0 = Release Double OpenMI|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release Double OpenMI|Win32.ActiveCfg = Release Double OpenMI|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release Double OpenMI|Win32.Build.0 = Release Double OpenMI|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release Double OpenMI|x64.ActiveCfg = Release Double OpenMI|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release Double OpenMI|x64.Build.0 = Release Double OpenMI|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release Double OpenMP PhreeqC|Any CPU.ActiveCfg = Release Double OpenMP PhreeqC|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release Double OpenMP PhreeqC|Mixed Platforms.ActiveCfg = Release Double OpenMP PhreeqC|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release Double OpenMP PhreeqC|Mixed Platforms.Build.0 = Release Double OpenMP PhreeqC|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release Double OpenMP PhreeqC|Win32.ActiveCfg = Release Double OpenMP PhreeqC|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release Double OpenMP PhreeqC|Win32.Build.0 = Release Double OpenMP PhreeqC|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release Double OpenMP PhreeqC|x64.ActiveCfg = Release Double OpenMP PhreeqC|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release Double OpenMP PhreeqC|x64.Build.0 = Release Double OpenMP PhreeqC|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release Double OpenMP|Any CPU.ActiveCfg = Release Double OpenMP|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release Double OpenMP|Mixed Platforms.ActiveCfg = Release Double OpenMP|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release Double OpenMP|Mixed Platforms.Build.0 = Release Double OpenMP|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release Double OpenMP|Win32.ActiveCfg = Release Double OpenMP|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release Double OpenMP|Win32.Build.0 = Release Double OpenMP|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release Double OpenMP|x64.ActiveCfg = Release Double OpenMP|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release Double OpenMP|x64.Build.0 = Release Double OpenMP|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release Double|Any CPU.ActiveCfg = Release Double|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release Double|Mixed Platforms.ActiveCfg = Release Double|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release Double|Mixed Platforms.Build.0 = Release Double|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release Double|Win32.ActiveCfg = Release Double|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release Double|Win32.Build.0 = Release Double|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release Double|x64.ActiveCfg = Release Double|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release Double|x64.Build.0 = Release Double|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release MPI|Any CPU.ActiveCfg = Release MPI|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release MPI|Mixed Platforms.ActiveCfg = Release MPI|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release MPI|Mixed Platforms.Build.0 = Release MPI|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release MPI|Win32.ActiveCfg = Release MPI|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release MPI|Win32.Build.0 = Release MPI|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release MPI|x64.ActiveCfg = Release MPI|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release MPI|x64.Build.0 = Release MPI|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release OpenMI|Any CPU.ActiveCfg = Release OpenMI|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release OpenMI|Mixed Platforms.ActiveCfg = Release OpenMI|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release OpenMI|Mixed Platforms.Build.0 = Release OpenMI|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release OpenMI|Win32.ActiveCfg = Release OpenMI|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release OpenMI|Win32.Build.0 = Release OpenMI|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release OpenMI|x64.ActiveCfg = Release OpenMI|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release OpenMI|x64.Build.0 = Release OpenMI|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release OpenMP|Any CPU.ActiveCfg = Release OpenMP|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release OpenMP|Mixed Platforms.ActiveCfg = Release OpenMP|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release OpenMP|Mixed Platforms.Build.0 = Release OpenMP|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release OpenMP|Win32.ActiveCfg = Release OpenMP|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release OpenMP|Win32.Build.0 = Release OpenMP|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release OpenMP|x64.ActiveCfg = Release OpenMP|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release OpenMP|x64.Build.0 = Release OpenMP|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release|Any CPU.ActiveCfg = Release|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release|Mixed Platforms.Build.0 = Release|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release|Win32.ActiveCfg = Release|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release|Win32.Build.0 = Release|Win32 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release|x64.ActiveCfg = Release|x64 + {98ABA093-7927-4BCD-B011-BF409B5BBB78}.Release|x64.Build.0 = Release|x64 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug Double OpenMI|Any CPU.ActiveCfg = Debug OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug Double OpenMI|Mixed Platforms.ActiveCfg = Debug OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug Double OpenMI|Mixed Platforms.Build.0 = Debug OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug Double OpenMI|Win32.ActiveCfg = Debug Double OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug Double OpenMI|Win32.Build.0 = Debug Double OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug Double OpenMI|x64.ActiveCfg = Debug Double OpenMI|x64 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug Double OpenMI|x64.Build.0 = Debug Double OpenMI|x64 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug Double Openmp|Any CPU.ActiveCfg = Debug OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug Double Openmp|Mixed Platforms.ActiveCfg = Debug OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug Double Openmp|Mixed Platforms.Build.0 = Debug OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug Double Openmp|Win32.ActiveCfg = Debug OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug Double Openmp|Win32.Build.0 = Debug OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug Double Openmp|x64.ActiveCfg = Debug OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug Double PhreeqC|Any CPU.ActiveCfg = Debug OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug Double PhreeqC|Mixed Platforms.ActiveCfg = Debug OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug Double PhreeqC|Mixed Platforms.Build.0 = Debug OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug Double PhreeqC|Win32.ActiveCfg = Debug OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug Double PhreeqC|Win32.Build.0 = Debug OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug Double PhreeqC|x64.ActiveCfg = Debug OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug Double|Any CPU.ActiveCfg = Debug|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug Double|Mixed Platforms.ActiveCfg = Debug|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug Double|Mixed Platforms.Build.0 = Debug|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug Double|Win32.ActiveCfg = Debug|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug Double|Win32.Build.0 = Debug|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug Double|x64.ActiveCfg = Debug OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug OpenMI|Any CPU.ActiveCfg = Debug OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug OpenMI|Mixed Platforms.ActiveCfg = Debug OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug OpenMI|Mixed Platforms.Build.0 = Debug OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug OpenMI|Win32.ActiveCfg = Debug OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug OpenMI|Win32.Build.0 = Debug OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug OpenMI|x64.ActiveCfg = Debug OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug OpenMP|Any CPU.ActiveCfg = Debug|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug OpenMP|Mixed Platforms.ActiveCfg = Debug|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug OpenMP|Mixed Platforms.Build.0 = Debug|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug OpenMP|Win32.ActiveCfg = Debug|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug OpenMP|Win32.Build.0 = Debug|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug OpenMP|x64.ActiveCfg = Debug OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug|Win32.ActiveCfg = Debug|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug|Win32.Build.0 = Debug|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Debug|x64.ActiveCfg = Debug|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release Double OpenMI|Any CPU.ActiveCfg = Release Double OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release Double OpenMI|Mixed Platforms.ActiveCfg = Release Double OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release Double OpenMI|Mixed Platforms.Build.0 = Release Double OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release Double OpenMI|Win32.ActiveCfg = Release Double OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release Double OpenMI|Win32.Build.0 = Release Double OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release Double OpenMI|x64.ActiveCfg = Release Double OpenMI|x64 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release Double OpenMI|x64.Build.0 = Release Double OpenMI|x64 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release Double OpenMP PhreeqC|Any CPU.ActiveCfg = Release OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release Double OpenMP PhreeqC|Mixed Platforms.ActiveCfg = Release OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release Double OpenMP PhreeqC|Mixed Platforms.Build.0 = Release OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release Double OpenMP PhreeqC|Win32.ActiveCfg = Release OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release Double OpenMP PhreeqC|Win32.Build.0 = Release OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release Double OpenMP PhreeqC|x64.ActiveCfg = Release OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release Double OpenMP|Any CPU.ActiveCfg = Release|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release Double OpenMP|Mixed Platforms.ActiveCfg = Release|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release Double OpenMP|Mixed Platforms.Build.0 = Release|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release Double OpenMP|Win32.ActiveCfg = Release|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release Double OpenMP|Win32.Build.0 = Release|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release Double OpenMP|x64.ActiveCfg = Release OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release Double|Any CPU.ActiveCfg = Release|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release Double|Mixed Platforms.ActiveCfg = Release|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release Double|Mixed Platforms.Build.0 = Release|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release Double|Win32.ActiveCfg = Release|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release Double|Win32.Build.0 = Release|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release Double|x64.ActiveCfg = Release OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release MPI|Any CPU.ActiveCfg = Release OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release MPI|Mixed Platforms.ActiveCfg = Release OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release MPI|Mixed Platforms.Build.0 = Release OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release MPI|Win32.ActiveCfg = Release OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release MPI|Win32.Build.0 = Release OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release MPI|x64.ActiveCfg = Release OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release OpenMI|Any CPU.ActiveCfg = Release OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release OpenMI|Mixed Platforms.ActiveCfg = Release OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release OpenMI|Mixed Platforms.Build.0 = Release OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release OpenMI|Win32.ActiveCfg = Release OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release OpenMI|Win32.Build.0 = Release OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release OpenMI|x64.ActiveCfg = Release OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release OpenMP|Any CPU.ActiveCfg = Release|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release OpenMP|Mixed Platforms.ActiveCfg = Release|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release OpenMP|Mixed Platforms.Build.0 = Release|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release OpenMP|Win32.ActiveCfg = Release|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release OpenMP|Win32.Build.0 = Release|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release OpenMP|x64.ActiveCfg = Release OpenMI|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release|Any CPU.ActiveCfg = Release|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release|Mixed Platforms.Build.0 = Release|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release|Win32.ActiveCfg = Release|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release|Win32.Build.0 = Release|Win32 + {473D1747-A62F-4AC5-B0F9-86DDACDA370E}.Release|x64.ActiveCfg = Release|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug Double OpenMI|Any CPU.ActiveCfg = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug Double OpenMI|Mixed Platforms.ActiveCfg = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug Double OpenMI|Mixed Platforms.Build.0 = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug Double OpenMI|Win32.ActiveCfg = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug Double OpenMI|Win32.Build.0 = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug Double OpenMI|x64.ActiveCfg = Release Double OpenMI|x64 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug Double OpenMI|x64.Build.0 = Release Double OpenMI|x64 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug Double Openmp|Any CPU.ActiveCfg = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug Double Openmp|Mixed Platforms.ActiveCfg = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug Double Openmp|Mixed Platforms.Build.0 = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug Double Openmp|Win32.ActiveCfg = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug Double Openmp|Win32.Build.0 = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug Double Openmp|x64.ActiveCfg = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug Double PhreeqC|Any CPU.ActiveCfg = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug Double PhreeqC|Mixed Platforms.ActiveCfg = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug Double PhreeqC|Mixed Platforms.Build.0 = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug Double PhreeqC|Win32.ActiveCfg = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug Double PhreeqC|Win32.Build.0 = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug Double PhreeqC|x64.ActiveCfg = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug Double|Any CPU.ActiveCfg = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug Double|Mixed Platforms.ActiveCfg = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug Double|Mixed Platforms.Build.0 = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug Double|Win32.ActiveCfg = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug Double|Win32.Build.0 = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug Double|x64.ActiveCfg = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug OpenMI|Any CPU.ActiveCfg = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug OpenMI|Mixed Platforms.ActiveCfg = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug OpenMI|Mixed Platforms.Build.0 = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug OpenMI|Win32.ActiveCfg = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug OpenMI|Win32.Build.0 = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug OpenMI|x64.ActiveCfg = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug OpenMP|Any CPU.ActiveCfg = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug OpenMP|Mixed Platforms.ActiveCfg = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug OpenMP|Mixed Platforms.Build.0 = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug OpenMP|Win32.ActiveCfg = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug OpenMP|Win32.Build.0 = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug OpenMP|x64.ActiveCfg = Debug OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug|Win32.ActiveCfg = Debug|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug|Win32.Build.0 = Debug|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Debug|x64.ActiveCfg = Debug|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release Double OpenMI|Any CPU.ActiveCfg = Release Double OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release Double OpenMI|Mixed Platforms.ActiveCfg = Release Double OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release Double OpenMI|Mixed Platforms.Build.0 = Release Double OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release Double OpenMI|Win32.ActiveCfg = Release Double OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release Double OpenMI|Win32.Build.0 = Release Double OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release Double OpenMI|x64.ActiveCfg = Release Double OpenMI|x64 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release Double OpenMI|x64.Build.0 = Release Double OpenMI|x64 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release Double OpenMP PhreeqC|Any CPU.ActiveCfg = Release OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release Double OpenMP PhreeqC|Mixed Platforms.ActiveCfg = Release OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release Double OpenMP PhreeqC|Mixed Platforms.Build.0 = Release OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release Double OpenMP PhreeqC|Win32.ActiveCfg = Release OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release Double OpenMP PhreeqC|Win32.Build.0 = Release OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release Double OpenMP PhreeqC|x64.ActiveCfg = Release OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release Double OpenMP|Any CPU.ActiveCfg = Release|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release Double OpenMP|Mixed Platforms.ActiveCfg = Release|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release Double OpenMP|Mixed Platforms.Build.0 = Release|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release Double OpenMP|Win32.ActiveCfg = Release|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release Double OpenMP|Win32.Build.0 = Release|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release Double OpenMP|x64.ActiveCfg = Release OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release Double|Any CPU.ActiveCfg = Release|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release Double|Mixed Platforms.ActiveCfg = Release|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release Double|Mixed Platforms.Build.0 = Release|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release Double|Win32.ActiveCfg = Release|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release Double|Win32.Build.0 = Release|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release Double|x64.ActiveCfg = Release OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release MPI|Any CPU.ActiveCfg = Release OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release MPI|Mixed Platforms.ActiveCfg = Release OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release MPI|Mixed Platforms.Build.0 = Release OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release MPI|Win32.ActiveCfg = Release OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release MPI|Win32.Build.0 = Release OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release MPI|x64.ActiveCfg = Release OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release OpenMI|Any CPU.ActiveCfg = Release OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release OpenMI|Mixed Platforms.ActiveCfg = Release OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release OpenMI|Mixed Platforms.Build.0 = Release OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release OpenMI|Win32.ActiveCfg = Release OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release OpenMI|Win32.Build.0 = Release OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release OpenMI|x64.ActiveCfg = Release OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release OpenMP|Any CPU.ActiveCfg = Release|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release OpenMP|Mixed Platforms.ActiveCfg = Release|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release OpenMP|Mixed Platforms.Build.0 = Release|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release OpenMP|Win32.ActiveCfg = Release|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release OpenMP|Win32.Build.0 = Release|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release OpenMP|x64.ActiveCfg = Release OpenMI|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release|Any CPU.ActiveCfg = Release|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release|Mixed Platforms.Build.0 = Release|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release|Win32.ActiveCfg = Release|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release|Win32.Build.0 = Release|Win32 + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A}.Release|x64.ActiveCfg = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {0D0BF81E-1A01-4C95-9B1B-C34B980904CC} = {F4334CCB-92E6-43E4-B5EE-8700A0BE00D5} + {0056F7D7-347A-40DE-98B8-843CF05B5488} = {0D0BF81E-1A01-4C95-9B1B-C34B980904CC} + {98ABA093-7927-4BCD-B011-BF409B5BBB78} = {0D0BF81E-1A01-4C95-9B1B-C34B980904CC} + {473D1747-A62F-4AC5-B0F9-86DDACDA370E} = {0D0BF81E-1A01-4C95-9B1B-C34B980904CC} + {0D17261E-10FE-42F8-A1D2-4CE823BA5E8A} = {0D0BF81E-1A01-4C95-9B1B-C34B980904CC} + EndGlobalSection +EndGlobal diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDRiver/MOHIDRiver.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDRiver/MOHIDRiver.vfproj new file mode 100644 index 000000000..2420a5752 --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDRiver/MOHIDRiver.vfproj @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDWater/MOHIDWater.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDWater/MOHIDWater.vfproj new file mode 100644 index 000000000..ceec6a383 --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDWater/MOHIDWater.vfproj @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDWater/UsedKeyWords_1.dat b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDWater/UsedKeyWords_1.dat new file mode 100644 index 000000000..e69de29bb diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDWaterEngine/MohidWaterEngine.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDWaterEngine/MohidWaterEngine.vfproj new file mode 100644 index 000000000..a7ae34d9f --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MOHIDWaterEngine/MohidWaterEngine.vfproj @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MohidLandEngine/MohidLandEngine.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MohidLandEngine/MohidLandEngine.vfproj new file mode 100644 index 000000000..a6829f08c --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/MohidLandEngine/MohidLandEngine.vfproj @@ -0,0 +1,149 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/OceanColor/OceanColor.vcproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/OceanColor/OceanColor.vcproj new file mode 100644 index 000000000..7bbb74f15 --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/OceanColor/OceanColor.vcproj @@ -0,0 +1,434 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/OceanColor/OceanColor.vcxproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/OceanColor/OceanColor.vcxproj new file mode 100644 index 000000000..0c373730e --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/OceanColor/OceanColor.vcxproj @@ -0,0 +1,111 @@ + + + + + Debug + Win32 + + + Release MPI + Win32 + + + Release + Win32 + + + + {C5CF769A-D6B5-4DC8-B39C-734B4D9D685C} + OceanColor + Win32Proj + 10.0.16299.0 + + + + StaticLibrary + Unicode + true + v141 + + + StaticLibrary + Unicode + v141 + + + v141 + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + $(Configuration)\ + + + + Disabled + WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebugDLL + + + Level3 + EditAndContinue + + + + + MaxSpeed + true + WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + MultiThreadedDLL + true + + + Level3 + ProgramDatabase + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/OceanColor/OceanColor.vcxproj.filters b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/OceanColor/OceanColor.vcxproj.filters new file mode 100644 index 000000000..c6f30f10a --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/OceanColor/OceanColor.vcxproj.filters @@ -0,0 +1,84 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav + + + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + + + + \ No newline at end of file diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/PhreeqC/PhreeqC.vcproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/PhreeqC/PhreeqC.vcproj new file mode 100644 index 000000000..a1f3a73aa --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/PhreeqC/PhreeqC.vcproj @@ -0,0 +1,1542 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/PhreeqC/PhreeqC.vcxproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/PhreeqC/PhreeqC.vcxproj new file mode 100644 index 000000000..87717ba7b --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/PhreeqC/PhreeqC.vcxproj @@ -0,0 +1,311 @@ + + + + + Debug + Win32 + + + Debug + x64 + + + Release + Win32 + + + Release + x64 + + + Release MPI + Win32 + + + Release MPI + x64 + + + + {5AEB2DAA-81F0-439A-8EE0-2148D7045B96} + PhreeqC + Win32Proj + 10.0.16299.0 + + + + StaticLibrary + Unicode + true + v141 + + + StaticLibrary + Unicode + true + v141 + + + StaticLibrary + Unicode + v141 + + + StaticLibrary + Unicode + true + v141 + + + StaticLibrary + Unicode + true + v141 + + + StaticLibrary + Unicode + v141 + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.40219.1 + $(Configuration)\ + $(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Configuration)\ + $(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + + + Disabled + WIN32;_DEBUG;_CONSOLE;USE_DOUBLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level3 + EditAndContinue + + + + + MaxSpeed + true + Speed + WIN32;NDEBUG;_CONSOLE;USE_DOUBLE;%(PreprocessorDefinitions) + MultiThreaded + 16Bytes + true + StreamingSIMDExtensions2 + Fast + + + Level3 + + + + + + + MaxSpeed + true + Speed + WIN32;NDEBUG;_CONSOLE;USE_DOUBLE;%(PreprocessorDefinitions) + MultiThreaded + 16Bytes + true + + + Level3 + + + + + + + X64 + + + Disabled + WIN32;_DEBUG;_CONSOLE;USE_DOUBLE;%(PreprocessorDefinitions) + true + EnableFastChecks + MultiThreadedDebug + + + Level3 + ProgramDatabase + + + + + X64 + + + MaxSpeed + true + Speed + WIN32;NDEBUG;_CONSOLE;USE_DOUBLE;%(PreprocessorDefinitions) + MultiThreaded + 16Bytes + true + NotSet + Fast + + + Level3 + + + OnlyExplicitInline + + + + + X64 + + + MaxSpeed + true + Speed + WIN32;NDEBUG;_CONSOLE;USE_DOUBLE;%(PreprocessorDefinitions) + MultiThreaded + 16Bytes + true + + + Level3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/PhreeqC/PhreeqC.vcxproj.filters b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/PhreeqC/PhreeqC.vcxproj.filters new file mode 100644 index 000000000..12f2b69ac --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/PhreeqC/PhreeqC.vcxproj.filters @@ -0,0 +1,300 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/SmoothBathymNesting/SmoothBathymNesting.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/SmoothBathymNesting/SmoothBathymNesting.vfproj new file mode 100644 index 000000000..8bc02e0ff --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/SmoothBathymNesting/SmoothBathymNesting.vfproj @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/TidePrev/TidePrev.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/TidePrev/TidePrev.vfproj new file mode 100644 index 000000000..b55c51f95 --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/TidePrev/TidePrev.vfproj @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/Valida4D/Valida4D.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/Valida4D/Valida4D.vfproj new file mode 100644 index 000000000..f49ad4393 --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/Valida4D/Valida4D.vfproj @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/hdf2surfer/hdf2surfer.vfproj b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/hdf2surfer/hdf2surfer.vfproj new file mode 100644 index 000000000..1bf5e8816 --- /dev/null +++ b/Solutions/VisualStudio2017_IntelFortran19/MOHIDNumerics/hdf2surfer/hdf2surfer.vfproj @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +