diff --git a/build/makefile b/build/makefile index 7fa0ce356a33829eacb35acb156cfd7a4b1dbb94..a20a1c374c447b954135e75bc670be1fd8a9024d 100644 --- a/build/makefile +++ b/build/makefile @@ -14,10 +14,10 @@ ACTORS_LIBRARIES = -L/usr/lib -L/usr/local/lib -L/Summa-Actors/bin -lcaf_core -l # Production runs -FLAGS_NOAH = -O3 -ffree-form -ffree-line-length-none -fmax-errors=0 -fPIC -Wfatal-errors -FLAGS_COMM = -O3 -ffree-line-length-none -fmax-errors=0 -fPIC -Wfatal-errors -FLAGS_SUMMA = -O3 -ffree-line-length-none -fmax-errors=0 -fPIC -Wfatal-errors -FLAGS_ACTORS = -O3 -Wfatal-errors -std=c++17 +FLAGS_NOAH = -g -O3 -ffree-form -ffree-line-length-none -fmax-errors=0 -fPIC -Wfatal-errors +FLAGS_COMM = -g -O3 -ffree-line-length-none -fmax-errors=0 -fPIC -Wfatal-errors +FLAGS_SUMMA = -g -O3 -ffree-line-length-none -fmax-errors=0 -fPIC -Wfatal-errors +FLAGS_ACTORS = -g -O3 -Wfatal-errors -std=c++17 # # Debug runs # FLAGS_NOAH = -g -O0 -ffree-form -ffree-line-length-none -fmax-errors=0 -fbacktrace -Wno-unused -Wno-unused-dummy-argument -fPIC diff --git a/build/source/netcdf/writeOutput.f90 b/build/source/netcdf/writeOutput.f90 index be435e2cd36f1bfca942ab1ce73a436fe20e6e92..aec4363e23d2e563e38b30a0b45faf6993e65d52 100644 --- a/build/source/netcdf/writeOutput.f90 +++ b/build/source/netcdf/writeOutput.f90 @@ -79,6 +79,8 @@ public::writeData public::writeBasin public::writeTime public::writeRestart +private::writeScalar +private::writeVector ! define dimension lengths integer(i4b),parameter :: maxSpectral=2 ! maximum number of spectral bands contains @@ -147,9 +149,9 @@ subroutine writeParm(ncid,ispatial,struct,meta,err,message) end subroutine writeParm - ! ************************************************************************************** - ! public subroutine writeData: write model time-dependent data - ! ************************************************************************************** +! ************************************************************************************** +! public subroutine writeData: write model time-dependent data +! ************************************************************************************** subroutine writeData(ncid,outputTimestep,outputTimestepUpdate,maxLayers,nSteps, & minGRU, maxGRU, numGRU, & meta,stat,dat,structName,map,indx,err,message) @@ -187,21 +189,11 @@ subroutine writeData(ncid,outputTimestep,outputTimestepUpdate,maxLayers,nSteps, integer(i4b) :: iStat ! statistics index integer(i4b) :: iFreq ! frequency index integer(i4b) :: ncVarID ! used only for time - integer(i4b) :: nSnow ! number of snow layers - integer(i4b) :: nSoil ! number of soil layers - integer(i4b) :: nLayers ! total number of layers ! output arrays - integer(i4b) :: datLength ! length of each data vector - integer(i4b) :: maxLength ! maximum length of each data vector real(rkind) :: timeVec(nSteps) ! timeVal to copy - real(rkind) :: realVec(numGRU, nSteps) ! real vector for all HRUs in the run domain - real(rkind) :: realArray(nSteps,maxLayers+1) ! real array for all HRUs in the run domain - integer(i4b) :: intArray(nSteps,maxLayers+1) ! integer array for all HRUs in the run domain - integer(i4b) :: dataType ! type of data integer(i4b),parameter :: ixInteger=1001 ! named variable for integer integer(i4b),parameter :: ixReal=1002 ! named variable for real integer(i4b) :: stepCounter ! counter to know how much data we have to write, needed because we do not always write nSteps - integer(i4b) :: gruCounter ! Used as an index into an array for holding scalar values integer(i4b) :: iStep integer(i4b) :: iGRU integer(i4b) :: verifiedGRUIndex ! index of HRU verified to not have failed @@ -252,127 +244,13 @@ subroutine writeData(ncid,outputTimestep,outputTimestepUpdate,maxLayers,nSteps, ! check that the variable is desired if (iStat==integerMissing.or.trim(meta(iVar)%varName)=='unknown') cycle - ! stats output: only scalar variable type - if(meta(iVar)%varType==iLookVarType%scalarv) then - select type(stat) - class is (gru_hru_time_doubleVec) - ! TODO: Why does this have to be an if-else? - if (minGRU == maxGRU)then ! check if we are only need to write for 1 GRU - gruCounter = 1 - do iStep = 1, nSteps - if(.not.outputStructure(1)%finalizeStats(1)%gru(verifiedGRUIndex)%hru(1)%tim(iStep)%dat(iFreq)) cycle - stepCounter = stepCounter + 1 - realVec(gruCounter, stepCounter) = stat%gru(verifiedGRUIndex)%hru(1)%var(map(iVar))%tim(iStep)%dat(iFreq) - end do ! iStep - else - do iGRU = minGRU, maxGRU - stepCounter = 0 - gruCounter = gruCounter + 1 - do iStep = 1, nSteps - if(.not.outputStructure(1)%finalizeStats(1)%gru(verifiedGRUIndex)%hru(1)%tim(iStep)%dat(iFreq)) cycle - stepCounter = stepCounter + 1 - realVec(gruCounter, stepCounter) = stat%gru(iGRU)%hru(1)%var(map(iVar))%tim(iStep)%dat(iFreq) - end do ! iStep - end do ! iGRU - endif - - err = nf90_put_var(ncid%var(iFreq),meta(iVar)%ncVarID(iFreq),realVec(1:gruCounter, 1:stepCounter),start=(/minGRU,outputTimestep(iFreq)/),count=(/numGRU,stepCounter/)) - if (outputTimeStepUpdate(iFreq) /= stepCounter ) then - print*, "ERROR Missmatch in Steps - stat doubleVec" - print*, " outputTimeStepUpdate(iFreq) = ", outputTimeStepUpdate(iFreq) - print*, " stepCounter = ", stepCounter - return - endif - class default; err=20; message=trim(message)//'stats must be scalarv and of type gru_hru_doubleVec'; return - end select ! stat - - else ! non-scalar variables: regular data structures - - ! initialize the data vectors - select type (dat) - class is (gru_hru_time_doubleVec); realArray(:,:) = realMissing; dataType=ixReal - class is (gru_hru_time_intVec); intArray(:,:) = integerMissing; dataType=ixInteger - class default; err=20; message=trim(message)//'data must not be scalarv and either of type gru_hru_doubleVec or gru_hru_intVec'; return - end select - - ! Loop over GRUs - gruCounter = 1 - do iGRU = minGRU, maxGRU - do iStep = 1, nSteps - ! get the model layers - nSoil = indx%gru(iGRU)%hru(1)%var(iLookIndex%nSoil)%tim(iStep)%dat(1) - nSnow = indx%gru(iGRU)%hru(1)%var(iLookIndex%nSnow)%tim(iStep)%dat(1) - nLayers = indx%gru(iGRU)%hru(1)%var(iLookIndex%nLayers)%tim(iStep)%dat(1) - - ! get the length of each data vector - select case (meta(iVar)%varType) - case(iLookVarType%wLength); datLength = maxSpectral - case(iLookVarType%midToto); datLength = nLayers - case(iLookVarType%midSnow); datLength = nSnow - case(iLookVarType%midSoil); datLength = nSoil - case(iLookVarType%ifcToto); datLength = nLayers+1 - case(iLookVarType%ifcSnow); datLength = nSnow+1 - case(iLookVarType%ifcSoil); datLength = nSoil+1 - case default; cycle - end select ! vartype - - ! get the data vectors - select type (dat) - class is (gru_hru_time_doubleVec) - ! do iStep = 1, nSteps - if(.not.outputStructure(1)%finalizeStats(1)%gru(verifiedGRUIndex)%hru(1)%tim(iStep)%dat(iFreq)) cycle - stepCounter = stepCounter + 1 - realArray(stepCounter,1:datLength) = dat%gru(iGRU)%hru(1)%var(iVar)%tim(iStep)%dat(:) - ! end do - - class is (gru_hru_time_intVec) - ! do iStep = 1, nSteps - if(.not.outputStructure(1)%finalizeStats(1)%gru(verifiedGRUIndex)%hru(1)%tim(iStep)%dat(iFreq)) cycle - stepCounter = stepCounter + 1 - intArray(stepCounter,1:datLength) = dat%gru(iGRU)%hru(1)%var(iVar)%tim(iStep)%dat(:) - ! end do - class default; err=20; message=trim(message)//'data must not be scalarv and either of type gru_hru_doubleVec or gru_hru_intVec'; return - end select - - ! get the maximum length of each data vector - select case (meta(iVar)%varType) - case(iLookVarType%wLength); maxLength = maxSpectral - case(iLookVarType%midToto); maxLength = maxLayers - case(iLookVarType%midSnow); maxLength = maxLayers-nSoil - case(iLookVarType%midSoil); maxLength = nSoil - case(iLookVarType%ifcToto); maxLength = maxLayers+1 - case(iLookVarType%ifcSnow); maxLength = (maxLayers-nSoil)+1 - case(iLookVarType%ifcSoil); maxLength = nSoil+1 - case default; cycle - end select ! vartype - - ! write the data vectors - select case(dataType) - - case(ixReal) - err = nf90_put_var(ncid%var(iFreq),meta(iVar)%ncVarID(iFreq),realArray(1:stepCounter,:),start=(/iGRU,1,outputTimestep(iFreq)/),count=(/1,maxLength,stepCounter/)) - if(err/=0)then; print*, "ERROR: with nf90_put_var in data vector (ixReal)"; return; endif - - case(ixInteger) - err = nf90_put_var(ncid%var(iFreq),meta(iVar)%ncVarID(iFreq),intArray(1:stepCounter,:),start=(/iGRU,1,outputTimestep(iFreq)/),count=(/1,maxLength,stepCounter/)) - if(err/=0)then; print*, "ERROR: with nf90_put_var in data vector (ixInteger)"; return; endif - - case default; err=20; message=trim(message)//'data must be of type integer or real'; return - end select ! data type - - end do ! isteps - - if (outputTimeStepUpdate(iFreq) /= stepCounter ) then - print*, "ERROR Missmatch in Steps: for non scalar case" - print*, " outputTimeStepUpdate(iFreq) = ", outputTimeStepUpdate(iFreq) - print*, " stepCounter = ", stepCounter - return - endif - - end do ! iGRU - - end if ! not scalarv - ! end do ! HRU Loop + ! stats output: only scalar variable type + if(meta(iVar)%varType==iLookVarType%scalarv) then + call writeScalar(ncid, outputTimeStep, outputTimeStepUpdate, nSteps, minGRU, maxGRU, numGRU, iFreq, iVar, meta, stat, map, err, message) + else ! non-scalar variables: regular data structures + call writeVector(ncid, outputTimeStep, outputTimeStepUpdate, maxLayers, nSteps, minGRU, maxGRU, iFreq, iVar, meta, dat, & + indx, err, message) + end if ! not scalarv ! process error code if (err/=0) message=trim(message)//trim(meta(iVar)%varName)//'_'//trim(get_statName(iStat)) @@ -384,6 +262,186 @@ subroutine writeData(ncid,outputTimestep,outputTimestepUpdate,maxLayers,nSteps, end subroutine writeData +subroutine writeScalar(ncid, outputTimestep, outputTimestepUpdate, nSteps, minGRU, maxGRU, & + numGRU, iFreq, iVar, meta, stat, map, err, message) + USE data_types,only:var_info ! metadata type + + implicit none + ! declare dummy variables + type(var_i) ,intent(in) :: ncid ! fileid + integer(i4b) ,intent(inout) :: outputTimestep(:) ! output time step + integer(i4b) ,intent(inout) :: outputTimestepUpdate(:) ! number of HRUs in the run domain + integer(i4b) ,intent(in) :: nSteps ! number of timeSteps + integer(i4b) ,intent(in) :: minGRU ! minGRU index to write + integer(i4b) ,intent(in) :: maxGRU ! maxGRU index to write - probably not needed + integer(i4b) ,intent(in) :: numGRU + integer(i4b) ,intent(in) :: iFreq ! output file index (year, month, day, timesteps) + integer(i4b) ,intent(in) :: iVar ! netcdf variable we are writing data for + type(var_info),intent(in) :: meta(:) ! meta data + class(*) ,intent(in) :: stat ! stats data + integer(i4b) ,intent(in) :: map(:) ! map into stats child struct + integer(i4b) ,intent(inout) :: err + character(*) ,intent(inout) :: message + + ! local variables + integer(i4b) :: gruCounter ! counter for the realVecs + integer(i4b) :: iStep ! counter for looping over nSteps + integer(i4b) :: stepCounter ! counter for the realVec + integer(i4b) :: iGRU + ! output array + real(rkind) :: realVec(numGRU, nSteps)! real vector for all HRUs in the run domain + + err=0; message="writeOutput.f90-writeScalar/" + + select type(stat) + class is (gru_hru_time_doubleVec) + gruCounter=0 + do iGRU = minGRU, maxGRU + stepCounter = 0 + gruCounter = gruCounter + 1 + do iStep = 1, nSteps + if(.not.outputStructure(1)%finalizeStats(1)%gru(iGRU)%hru(1)%tim(iStep)%dat(iFreq)) cycle + stepCounter = stepCounter + 1 + realVec(gruCounter, stepCounter) = stat%gru(iGRU)%hru(1)%var(map(iVar))%tim(iStep)%dat(iFreq) + end do ! iStep + end do ! iGRU + + err = nf90_put_var(ncid%var(iFreq),meta(iVar)%ncVarID(iFreq),realVec(1:gruCounter, 1:stepCounter),start=(/minGRU,outputTimestep(iFreq)/),count=(/numGRU,stepCounter/)) + if (outputTimeStepUpdate(iFreq) /= stepCounter ) then + print*, "ERROR Missmatch in Steps - stat doubleVec" + print*, " outputTimeStepUpdate(iFreq) = ", outputTimeStepUpdate(iFreq) + print*, " stepCounter = ", stepCounter + return + endif + class default; err=20; message=trim(message)//'stats must be scalarv and of type gru_hru_doubleVec'; return + end select ! stat + +end subroutine + +subroutine writeVector(ncid, outputTimestep, outputTimestepUpdate, maxLayers, nSteps, minGRU, maxGRU, & + iFreq, iVar, meta, dat, indx, err, message) + USE data_types,only:var_info ! metadata type + USE var_lookup,only:iLookIndex ! index into index structure + USE var_lookup,only:iLookVarType ! index into type structure + + implicit none + type(var_i) ,intent(in) :: ncid ! fileid + integer(i4b) ,intent(inout) :: outputTimestep(:) ! output time step + integer(i4b) ,intent(inout) :: outputTimestepUpdate(:) ! number of HRUs in the run domain + integer(i4b) ,intent(in) :: maxLayers ! maximum number of layers + integer(i4b) ,intent(in) :: nSteps ! number of timeSteps + integer(i4b) ,intent(in) :: minGRU ! minGRU index to write + integer(i4b) ,intent(in) :: maxGRU ! maxGRU index to write - probably not needed + integer(i4b) ,intent(in) :: iFreq ! output file index (year, month, day, timesteps) + integer(i4b) ,intent(in) :: iVar ! netcdf variable we are writing data for + type(var_info),intent(in) :: meta(:) ! meta data + class(*) ,intent(in) :: dat ! timestep data + type(gru_hru_time_intVec) ,intent(in) :: indx ! index data + integer(i4b) ,intent(inout) :: err + character(*) ,intent(inout) :: message + + ! local variables + integer(i4b) :: gruCounter ! counter for the realVecs + integer(i4b) :: iStep ! counter for looping over nSteps + integer(i4b) :: stepCounter ! counter for the realVec + integer(i4b) :: iGRU + integer(i4b) :: nSoil + integer(i4b) :: nSnow + integer(i4b) :: nLayers + ! output array + integer(i4b) :: datLength ! length of each data vector + integer(i4b) :: maxLength ! maximum length of each data vector + integer(i4b) :: dataType ! type of data + integer(i4b),parameter :: ixInteger=1001 ! named variable for integer + integer(i4b),parameter :: ixReal=1002 ! named variable for real + real(rkind) :: realArray(nSteps,maxLayers+1) ! real array for all HRUs in the run domain + integer(i4b) :: intArray(nSteps,maxLayers+1) ! integer array for all HRUs in the run domain + + + ! initialize the data vectors + select type (dat) + class is (gru_hru_time_doubleVec); realArray(:,:) = realMissing; dataType=ixReal + class is (gru_hru_time_intVec); intArray(:,:) = integerMissing; dataType=ixInteger + class default; err=20; message=trim(message)//'data must not be scalarv and either of type gru_hru_doubleVec or gru_hru_intVec'; return + end select + + ! Loop over GRUs + gruCounter = 1 + do iGRU = minGRU, maxGRU + do iStep = 1, nSteps + ! get the model layers + nSoil = indx%gru(iGRU)%hru(1)%var(iLookIndex%nSoil)%tim(iStep)%dat(1) + nSnow = indx%gru(iGRU)%hru(1)%var(iLookIndex%nSnow)%tim(iStep)%dat(1) + nLayers = indx%gru(iGRU)%hru(1)%var(iLookIndex%nLayers)%tim(iStep)%dat(1) + + ! get the length of each data vector + select case (meta(iVar)%varType) + case(iLookVarType%wLength); datLength = maxSpectral + case(iLookVarType%midToto); datLength = nLayers + case(iLookVarType%midSnow); datLength = nSnow + case(iLookVarType%midSoil); datLength = nSoil + case(iLookVarType%ifcToto); datLength = nLayers+1 + case(iLookVarType%ifcSnow); datLength = nSnow+1 + case(iLookVarType%ifcSoil); datLength = nSoil+1 + case default; cycle + end select ! vartype + + ! get the data vectors + select type (dat) + class is (gru_hru_time_doubleVec) + ! do iStep = 1, nSteps + if(.not.outputStructure(1)%finalizeStats(1)%gru(iGRU)%hru(1)%tim(iStep)%dat(iFreq)) cycle + stepCounter = stepCounter + 1 + realArray(stepCounter,1:datLength) = dat%gru(iGRU)%hru(1)%var(iVar)%tim(iStep)%dat(:) + ! end do + + class is (gru_hru_time_intVec) + ! do iStep = 1, nSteps + if(.not.outputStructure(1)%finalizeStats(1)%gru(iGRU)%hru(1)%tim(iStep)%dat(iFreq)) cycle + stepCounter = stepCounter + 1 + intArray(stepCounter,1:datLength) = dat%gru(iGRU)%hru(1)%var(iVar)%tim(iStep)%dat(:) + ! end do + class default; err=20; message=trim(message)//'data must not be scalarv and either of type gru_hru_doubleVec or gru_hru_intVec'; return + end select + + ! get the maximum length of each data vector + select case (meta(iVar)%varType) + case(iLookVarType%wLength); maxLength = maxSpectral + case(iLookVarType%midToto); maxLength = maxLayers + case(iLookVarType%midSnow); maxLength = maxLayers-nSoil + case(iLookVarType%midSoil); maxLength = nSoil + case(iLookVarType%ifcToto); maxLength = maxLayers+1 + case(iLookVarType%ifcSnow); maxLength = (maxLayers-nSoil)+1 + case(iLookVarType%ifcSoil); maxLength = nSoil+1 + case default; cycle + end select ! vartype + + ! write the data vectors + select case(dataType) + + case(ixReal) + err = nf90_put_var(ncid%var(iFreq),meta(iVar)%ncVarID(iFreq),realArray(1:stepCounter,:),start=(/iGRU,1,outputTimestep(iFreq)/),count=(/1,maxLength,stepCounter/)) + if(err/=0)then; print*, "ERROR: with nf90_put_var in data vector (ixReal)"; return; endif + + case(ixInteger) + err = nf90_put_var(ncid%var(iFreq),meta(iVar)%ncVarID(iFreq),intArray(1:stepCounter,:),start=(/iGRU,1,outputTimestep(iFreq)/),count=(/1,maxLength,stepCounter/)) + if(err/=0)then; print*, "ERROR: with nf90_put_var in data vector (ixInteger)"; return; endif + + case default; err=20; message=trim(message)//'data must be of type integer or real'; return + end select ! data type + + end do ! isteps + + if (outputTimeStepUpdate(iFreq) /= stepCounter ) then + print*, "ERROR Missmatch in Steps: for non scalar case" + print*, " outputTimeStepUpdate(iFreq) = ", outputTimeStepUpdate(iFreq) + print*, " stepCounter = ", stepCounter + return + endif + + end do ! iGRU +end subroutine + ! ************************************************************************************** ! public subroutine writeBasin: write basin-average variables ! ************************************************************************************** diff --git a/utils/containers/docker/Dockerfile b/utils/containers/docker/Dockerfile index e119731e6b90baf51a9a685bfd941dfd877e7cb4..5e8d61e0841e70583d6d6975c917288ec2f1b46d 100755 --- a/utils/containers/docker/Dockerfile +++ b/utils/containers/docker/Dockerfile @@ -3,30 +3,26 @@ FROM ubuntu:20.04 WORKDIR /code # Get library dependencies -RUN apt-get update && \ +RUN apt-get update -y && \ + apt-get upgrade -y && \ DEBIAN_FRONTEND="noninteractive" apt-get install -y software-properties-common \ libnetcdf-dev \ libnetcdff-dev \ liblapack-dev \ - libopenblas-dev - -# Get gfortran dependencies -RUN add-apt-repository ppa:ubuntu-toolchain-r/test -y \ - && apt-get update \ - && apt-get install -y gfortran-7 - -# get some other useful dependencies -RUN apt update -y \ - && apt upgrade -y \ - && DEBIAN_FRONTEND="noninteractive" apt install -y \ - cmake \ - g++ \ - git \ - libssl-dev \ - make \ - gfortran \ - gdb \ - && apt-get autoclean + libopenblas-dev \ + cmake \ + g++ \ + git \ + libssl-dev \ + make \ + gfortran \ + python3-pip \ + gdb &&\ + apt-get autoclean + +RUN pip3 install xarray +RUN pip3 install netcdf4 + # Install the C++ Actor Framework From Git RUN git clone https://github.com/actor-framework/actor-framework.git diff --git a/utils/containers/docker/launch_docker_container.sh b/utils/containers/docker/launch_docker_container.sh index 9a25142c5936db44b56ae82f0228675aa48767aa..0e65916ae278dceb628345adfa279174087159e8 100755 --- a/utils/containers/docker/launch_docker_container.sh +++ b/utils/containers/docker/launch_docker_container.sh @@ -1,10 +1,8 @@ #! /bin/bash -export PROJECT_DIR=/home/local/kck540/SUMMA-Projects/Summa-Actors +export PROJECT_DIR=/Users/kyleklenk/SUMMA-Projects/Summa-Actors export NA_TEST=/home/local/kck540/NA_Summa_Test export SUMMA=/home/local/kck540/SUMMA-Projects/summa-reference/summa -echo ${PROJECT_DIR} -docker run -d -it --name SUMMA-Actors --mount type=bind,source=${PROJECT_DIR},target=/Summa-Actors \ - --mount type=bind,source=${NA_TEST},target=/NA_Test \ - --mount type=bind,source=${SUMMA},target=/SUMMA \ - summa-actors:latest \ No newline at end of file +docker run -d -it --name SUMMA-Actors --mount type=bind,source=${PROJECT_DIR},target=/Summa-Actors summa-actors:latest + # --mount type=bind,source=${NA_TEST},target=/NA_Test \ + # --mount type=bind,source=${SUMMA},target=/SUMMA \ \ No newline at end of file diff --git a/utils/laugh_tests/celia1990/output/runinfo.txt b/utils/laugh_tests/celia1990/output/runinfo.txt index 0ae02e898c2bce604a09b3c81f65a96eb9b37a39..e444708c65bfe34a9b368f023ad7d3a3674131b9 100644 --- a/utils/laugh_tests/celia1990/output/runinfo.txt +++ b/utils/laugh_tests/celia1990/output/runinfo.txt @@ -1 +1 @@ - Run start time on system: ccyy=2022 - mm=08 - dd=11 - hh=19 - mi=12 - ss=22.249 + Run start time on system: ccyy=2022 - mm=08 - dd=12 - hh=17 - mi=12 - ss=58.157 diff --git a/utils/laugh_tests/celia1990/output/summa-actors_celia1990GRU1-1_timestep.nc b/utils/laugh_tests/celia1990/output/summa-actors_celia1990GRU1-1_timestep.nc index 2302dfc0eedc965b30aef30f733ae7b33eddfe5a..0fb39e4297953022c8a5873cd1dcfe2bd1b056c9 100644 Binary files a/utils/laugh_tests/celia1990/output/summa-actors_celia1990GRU1-1_timestep.nc and b/utils/laugh_tests/celia1990/output/summa-actors_celia1990GRU1-1_timestep.nc differ diff --git a/utils/laugh_tests/celia1990/verify_celia.py b/utils/laugh_tests/celia1990/verify_celia.py index 1d7a3369bf3d4e101453bcf4fdcc4d8ae9e45531..e319c807c1e805bc4d7e9a825d6dab629468a0de 100644 --- a/utils/laugh_tests/celia1990/verify_celia.py +++ b/utils/laugh_tests/celia1990/verify_celia.py @@ -46,8 +46,8 @@ output_variables = [time, nSnow, nSoil, nLayers, mLayerHeight, iLayerLiqFluxSoil scalarSWE, fieldCapacity] # find the output files -verified_data_path = Path("/home/local/kck540/SUMMA-Projects/Summa-Actors/utils/laugh_tests/celia1990/verification_data/summa_celia1990_G1-1_timestep.nc") -data_to_compare_path = Path("/home/local/kck540/SUMMA-Projects/Summa-Actors/utils/laugh_tests/celia1990/output/summa-actors_celia1990GRU1-1_timestep.nc") +verified_data_path = Path("./verification_data/summa_celia1990_G1-1_timestep.nc") +data_to_compare_path = Path("./output/summa-actors_celia1990GRU1-1_timestep.nc") try: verified_dataset = xr.open_dataset(verified_data_path) @@ -101,6 +101,7 @@ for iHRU in range(0, numHRU): print("variable -",var, "has different values at", elem) print(" verified_hru = ", verified_data[elem]) print(" hru_to_compare = ", to_verify_data[elem]) + break # if (verified_hru[var].values != hru_to_compare[var].values).all(): # print("ERROR: Output data is not the same in",var)